我有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,但它没有用。
我面临的问题是:不确定每个网址的状态(已完成/处理/已终止/错误)以及如何使此进程按顺序执行? 是否有其他技术可以帮助我完成上述任务?
答案 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;这告诉我您正在使用的消息处理器在预期的处理实际完成之前返回。我们需要知道您正在使用的消息处理器来帮助解决这个问题。