首页 > 解决方案 > 在 Cadence 工作流程中轮询外部状态转换

问题描述

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

标签: cadence-workflowtemporal-workflow

解决方案


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

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

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

  • 在极少数情况下,当轮询需要定期执行一系列活动或活动参数应在重试之间发生变化时,可以使用子工作流。诀窍是父母不知道孩子调用continue as new。只有当孩子完成或失败时才会收到通知。因此,如果一个孩子在循环中执行一系列活动并定期调用 continue as new ,那么在孩子完成之前,父母不会受到影响。


推荐阅读