一个接一个地运行应用程序

时间:2015-03-18 18:48:38

标签: architecture mule

我有6个骡子流(或网址)一个接一个地执行:

URL 1:http://myhost:port/process1  // takes 3 hours or more
URL 2:http://myhost:port/process2  // takes 2 hours or more 
URL 3:http://myhost:port/process3  // takes 4 hours or more
URL 4:http://myhost:port/process4  // takes 1 hour or more
URL 5:http://myhost:port/process5  // takes 5 hours or more
URL 6:http://myhost:port/process6  // takes 4 hours or more

每个进程基于数据(可能是兆/兆字节数据)和基于数据的各种执行时间执行,每个进程处理并行(异步)。

要求是迁移数据,代码是通过Mule流程到ftech数据和jdbc来插入数据。插入jdbc是通过异步调用和for循环完成的。

假设如果我运行url1,不知道它什么时候结束,如果我在流程结束时放置一个记录器,记录器会在流程完成之前打印。如果我按顺序进行,浏览器会等待一段时间并过期。

目前我正在运行一个网址并在完成后运行另一个网址。

如何使所有这些过程在主流程中执行,即一个流程执行所有六个URL,但它应该一个接一个地完成。我已经通过顺序执行一个流来调用所有这个URL,但它没有用。

我面临的问题是:不确定每个网址的状态(已完成/处理/已终止/错误)以及如何使此进程按顺序执行? 是否有其他技术可以帮助我完成上述任务?

2 个答案:

答案 0 :(得分:0)

我会查看Mule中的scatter-gather路由器(http://www.mulesoft.org/documentation/display/current/Scatter-Gather),它取代了all路由器。

您可以通过限制此处提到的线程来实现顺序多播:http://www.mulesoft.org/documentation/display/current/Scatter-Gather#Scatter-Gather-SerialMulticastwithScatter-Gather

答案 1 :(得分:0)

尝试使用同步处理策略和流引用:

<sub-flow name="process1">
    <!-- no need for an inbound endpoint for each process -->
    <!-- process 1 logic -->
</sub-flow>

<sub-flow name="process2">
    <!-- process 2 logic -->
</sub-flow>

<flow name="orchestrationFlow" processingStrategy="synchronous">
    <!-- any inbound endpoint will do to trigger the sequence -->
    <flow-ref name="process1" />
    <flow-ref name="process2" />
</flow>

您提到flow1末尾的记录器在&#34之前执行;过程完成。&#34;这告诉我您正在使用的消息处理器在预期的处理实际完成之前返回。我们需要知道您正在使用的消息处理器来帮助解决这个问题。