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

How to poll in Mule until all jobs are completed

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

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

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

我正在使用 Anypoint Studio 6.2 和 Mule 3.8.3

谢谢

首先 - 假设您的 api 调用触发 5 个批处理作业。在每个作业完成时,您需要在数据库或对象存储(或任何其他可检索方式)中更新作业 success/failure/inprogress 的状态。

假设您的作业将在 1 小时内完成。

假设您正在更新数据库中的状态。

创建轮询流程以每隔一小时在数据库中检查您的工作状态是否为 success/failure,并使您的流程处于 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>

由于流程处于停止状态,轮询不会触发,直到流程变为启动状态。你有一个控制。

流程始终处于停止状态state.When您请求api同时触发5个批处理作业同时启动'Job_status_check_flow'到start(您可以使用 groovy component- 根据条件启动和停止流)。请检查以下链接

Starting a mule flow programmatically using groovy

auto-starting Mule flow

在这种情况下,轮询流程每 1 小时检查一次状态,直到 DB 将 5 个作业的所有状态检索到已完成状态。如果是这样,在 'Job_status_check_flow' 到 stopped state 的末尾有一个 groovy 组件。这样投票就不会再触发了。