在Cadence工作流程中轮询外部状态转换

时间:2019-08-19 19:22:35

标签: cadence-workflow

我有一个Cadence工作流程,在该工作流程中,我需要轮询外部AWS API,直到特定的资源转换为止,这可能需要一些时间。我假设我应该让每个“ checkStatus”都请求一个Activity,并让工作流执行睡眠/检查循环。但是,这意味着我的工作流程历史记录中可能包含无数的活动调用。那令人担忧吗?有没有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

这取决于您要轮询的频率。

  • 对于不频繁的轮询(每分钟或更慢),请使用服务器端重试。调用活动时,请指定RetryPolicy(对于Java,请指定RetryOptions)。在RetryPolicy中,指定指数系数1和轮询频率的初始间隔。然后,如果活动的资源尚未准备好并且服务器将在指定的重试策略到期间隔内重试该资源,则使活动失败。

  • 对于每隔几秒钟或更长时间的非常频繁的轮询,解决方案是在活动实现内部实施轮询,使其成为轮询并随后在轮询间隔内休眠的循环。为了确保在工作人员失败/重新启动的情况下及时重新启动轮询活动,该活动必须在每次迭代时都进行心跳检测。为此类失败的活动重新启动使用适当的RetryPolicy。

  • 在极少数情况下,当轮询需要定期执行一系列活动或活动参数时,应在重试之间进行更改,然后可以使用子工作流程。诀窍是,父母不知道孩子叫 continue as new 。它仅在孩子完成或失败时得到通知。因此,如果孩子在循环中执行活动序列并以新的周期继续进行调用,则直到孩子完成后,父级才会受到影响。