如何在Mule中进行轮询直到所有作业完成

时间:2017-07-26 21:13:41

标签: caching mule polling anypoint-studio

我要求构建工作流通过调用API触发一组批处理作业,然后轮询另一个API以检查每个批处理作业何时完成。只有当所有批处理作业都完成后,工作流才能进入下一步。做这个的最好方式是什么?

我曾考虑使用Poll组件,但我不确定如何启动和停止轮询,因为我的经验是在预定时间运行轮询或不断轮询外部源。我目前的思路是在表达式框中使用一个标志,一旦所有批处理作业完成,该标志设置为true。

另一个问题是批处理作业ID都在JSON对象中,当API开始返回显示批处理作业完成的结果时,检查每个批处理作业ID的最佳方法是什么?

我正在使用Anypoint Studio 6.2和Mule 3.8.3

由于

1 个答案:

答案 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

auto-starting Mule flow

在这种情况下,轮询流程每隔1小时检查一次状态,直到DB检索到5个作业的所有状态为完成状态。如果是这样,那么在&#39; Job_status_check_flow&#39;结尾处有一个groovy组件。到stopped state。因此民意调查不会再次触发。