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



我有一个 Cadence 工作流,我需要轮询外部 AWS API,直到特定资源转换,这可能需要一些时间。我假设我应该让每个单独的"checkStatus"请求成为活动,并让工作流执行睡眠/检查循环。但是,这意味着我的工作流历史记录中可能有无限数量的活动调用。这令人担忧吗?有没有更好的方法来实现这一目标?

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

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

  • 对于每隔几秒钟或更快的非常频繁的轮询,解决方案是在活动实现中实现轮询,作为轮询,然后在轮询间隔内休眠的循环。为了确保在工作线程失败/重新启动时及时重新启动轮询活动,活动必须在每次迭代时检测信号。使用适当的重试策略重新启动此类失败的活动。

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

最新更新