我需要构建一个工作流,通过调用 API 来触发一组批处理作业,然后轮询另一个 API 以检查每个批处理作业何时完成。 只有当所有批处理作业都完成后,工作流才能进入下一步。 最好的方法是什么?
我曾考虑过使用 Poll 组件,但我不确定如何开始和停止投票,因为我的经验是在预定时间运行民意调查或不断轮询外部源。 我目前的想法是在表达式框中使用一个标志,一旦所有批处理作业完成,该标志将设置为 true。
另一个问题是批处理作业 ID 都在 JSON 对象中,当 API 开始返回显示批处理作业完成的结果时,检查每个批处理作业 ID 的最佳方法是什么?
我正在使用Anypoint Studio 6.2和Mule 3.8.3
谢谢
首先 - 假设您的 api 调用触发 5 个批处理作业。在每个作业完成时,您需要在数据库或对象存储(或任何其他可检索方式(中更新作业成功/失败/进行中的状态。
假设您的工作将在 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 个批处理作业时,还要启动"Job_status_check_flow"以start
(您可以使用 groovy 组件 - 根据条件启动和停止流(。请查看以下链接
使用 groovy 以编程方式启动骡子流
自动启动骡子流
在这种情况下,轮询流每 1 小时检查一次状态,直到数据库将 5 个作业的所有状态检索到已完成状态。如果是这样,在"Job_status_check_flow"的末尾有一个时髦的组件来stopped state
。这样该轮询就不会再次触发。