Apache Camel 是一个开源集成框架,它将在这方面为您提供帮助。
您可以使用Apache Camel构建自己的简单工作流管理器,其中每个流程都实现Processor。您的数据可以通过使用 camel Exchange的处理器传递。查看骆驼示例以获取更多信息。
有关如何编写自定义处理器的信息,请阅读此处。
您可以动态地将处理器添加到 Camel RouteBuilder,使用Quartz Scheduler等进行调度,这或多或少会满足您的所有需求。
这是对骆驼的很好的介绍:http ://www.kai-waehner.de/blog/2012/05/04/apache-camel-tutorial-introduction/
使用 Camel 的 Workflow Manager 的简单实现:
工作流管理器.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 版来编译这段代码。请注意,我在 main 方法中使用了无限循环来保持主线程处于活动状态。
此代码将运行具有 ProcessOne 和 ProcessTwo 的路由,周期为 1 秒。您可以在 from(...) 方法中看到我将处理器添加到路由构建器的时间段。因此,这条路线将重复运行。另外,我也不想传输任何数据。您可以在每个处理器的处理方法中使用交换来传输数据。
输出将是:
In ProcessOne
In ProcessTwo
In ProcessOne
In ProcessTwo
您可以使用骆驼组件来使您的 WorkflowManager 健壮。