我要求构建工作流通过调用API触发一组批处理作业,然后轮询另一个API以检查每个批处理作业何时完成。只有当所有批处理作业都完成后,工作流才能进入下一步。做这个的最好方式是什么?
我曾考虑使用Poll组件,但我不确定如何启动和停止轮询,因为我的经验是在预定时间运行轮询或不断轮询外部源。我目前的思路是在表达式框中使用一个标志,一旦所有批处理作业完成,该标志设置为true。
另一个问题是批处理作业ID都在JSON对象中,当API开始返回显示批处理作业完成的结果时,检查每个批处理作业ID的最佳方法是什么?
我正在使用Anypoint Studio 6.2和Mule 3.8.3
由于
答案 0 :(得分:0)
首先 - 假设您的api调用触发5个批处理作业。在每个作业完成后,您需要更新db或对象存储(或任何其他可检索方式)中作业成功/失败/进行的状态。
说出你的工作在1小时内完成的最短时间。
假设您正在更新数据库中的状态。
创建轮询流以检查您的作业状态是否每隔一小时在db中成功/失败,并使您的流量处于stopped
状态。
<flow name="Job_status_check_flow" initialState="stopped">
<poll doc:name="Poll">
<fixed-frequency-scheduler frequency="1" timeUnit="HOURS"/>
<logger level="INFO" doc:name="Logger"/>
</poll>
<logger message="poll" level="INFO" doc:name="Logger"/>
<db component or object store here --->
</flow>
由于流量处于停止状态,因此轮询不会触发,直到流量变为启动状态。你有一个控制权。
始终流程将处于停止状态。当您请求api同时触发5个批处理作业时,也会启动&#39; Job_status_check_flow&#39;到start
(你可以使用groovy组件 - 根据条件启动和停止流程)。请查看以下链接
Starting a mule flow programmatically using groovy
在这种情况下,轮询流程每隔1小时检查一次状态,直到DB检索到5个作业的所有状态为完成状态。如果是这样,那么在&#39; Job_status_check_flow&#39;结尾处有一个groovy组件。到stopped state
。因此民意调查不会再次触发。