如何使用 aws sdk 实现 SWF 指数重试

How to implement SWF exponential retries using the aws sdk

我正在尝试使用 AWS SDK v2 实施 jruby SWF activity worker。

我不能使用 aws-flow-ruby 框架,因为它与 jruby(forking) 不兼容,所以我写了一个使用线程的 worker。

https://github.com/djpate/jflow 如果有人感兴趣。

无论如何,他们在框架中实施了重试,而且如果 activity 失败,它似乎实际上会在稍后安排相同的 activity。

我在 AWS 文档中随处可见,但找不到如何使用 SDK 将该信号发送回 SWF http://docs.aws.amazon.com/sdkforruby/api/Aws/SWF/Client.html

有人知道我应该去哪里找吗?

从这个问题来看,我相信您对 SWF 是什么/它的工作原理有些困惑。

活动不会 运行 并且不会单独重试。一切都发生在工作流程的上下文中。工作流定义告诉您何时重试以及在活动 fail/timeout 等

时如何操作

处理工作流定义并安排接下来需要发生的事情的工作人员称为决策者。 (你会看到决策者和工作流可以互换使用)。之所以称为决策器,是因为它会根据当前状态来决定下一个需要安排的 activity 是什么。决策者在进行此输入时通常将工作流历史记录作为输入。

例如在 Flow 中,重试被编码在工作流逻辑中。基本上,如果 activity 失败,您可以安排它。

所以最后回答你的问题:如果你的目标是只实现 activity 工作人员,你不需要实现任何重试逻辑,因为这发生在决策层。您应该确保活动与决策者兼容(您需要确保历史和 input/output 约定相同)。 如果您的目标是在 SWF 之上实施您自己的框架,您需要实际完成使决策程序工作所需的艰苦工作。