Apache Camel は、これに役立つオープン ソースの統合フレームワークです。
Apache Camelを使用して、各プロセスがProcessorを実装する独自の単純なワークフロー マネージャーを構築できます。camel Exchangeを使用して、データをプロセッサ経由で渡すことができます。詳細については、ラクダの例をご覧ください。
カスタム プロセッサの記述方法については、こちらをお読みください。
プロセッサを Camel RouteBuilder に動的に追加したり、Quartz Schedulerなどを使用してスケジュールを設定したりできます。これにより、多かれ少なかれすべての要件に対処できます。
Camel の紹介はこちら: http://www.kai-waehner.de/blog/2012/05/04/apache-camel-tutorial-introduction/
Camel を使用したワークフロー マネージャーの簡単な実装:
WorkflowManager.java
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
public class WorkflowManager {
DefaultCamelContext camelContext;
public WorkflowManager() {
camelContext = new DefaultCamelContext();
RouteBuilder routeBuilder = new RouteBuilder() {
@Override
public void configure() throws Exception {
from("timer:schedule?period=1s&daemon=true").process(new ProcessOne()).process(new ProcessTwo());
}
};
try {
camelContext.addRoutes(routeBuilder);
} catch (Exception e) {
e.printStackTrace();
}
}
public void start() throws Exception {
camelContext.start();
}
public void stop() throws Exception {
camelContext.stop();
}
public static void main(String[] args) {
WorkflowManager workflowManager = new WorkflowManager();
try {
workflowManager.start();
while(true) {
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ProcessOne.java
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class ProcessOne implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("In ProcessOne");
}
}
ProcessTwo.java
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class ProcessTwo implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("In ProcessTwo");
}
}
このコードをコンパイルするには、Camel バージョン 2.9.0 を使用しました。メインスレッドを維持するために、メインメソッドで無限ループを使用したことに注意してください。
このコードは、ProcessOne と ProcessTwo を含むルートを 1 秒間実行します。プロセッサをルート ビルダーに追加する from(...) メソッドの期間を確認できます。したがって、このルートは繰り返し実行されます。また、データを流そうとしていません。各プロセッサの process メソッドで exchange を使用してデータを流すことができます。
出力は次のようになります。
In ProcessOne
In ProcessTwo
In ProcessOne
In ProcessTwo
Camel コンポーネントを使用して、WorkflowManager を堅牢にすることができます。