【问题标题】:Amazon SWF Flow - Handling timeoutsAmazon SWF 流 - 处理超时
【发布时间】:2015-11-29 11:32:17
【问题描述】:

我正在使用 Amazon 的 Java Flow 框架开发一个相对简单的工作流程。我想我对现在正在发生的一切都有相当的了解,但我有一个领域我仍然不确定:我应该如何处理超时?

我的工作流程的主要超时是工作流程本身的 executionStartToCloseTimeoutSeconds,但我想无论哪个超时触发,流程都是相同的。似乎大多数时候,当任务超时时,它就会消失。我希望能够知道这种情况何时发生并做一些事情(例如发送电子邮件或以某种方式记录它)。我四处搜索,找不到任何通知超时发生的示例。

【问题讨论】:

    标签: java amazon-web-services amazon-swf


    【解决方案1】:

    活动超时以异常的形式传递给工作流代码,可以轻松处理。

    恕我直言,工作流程执行超时类似于 Unix 中的 kill -9。它会杀死工作流,而不会给它机会执行清理。所以它的主要用途是确保损坏的工作流实例不会永远保持打开状态。

    对于所有业务级别的超时,不依赖于工作流超时,而是使用计时器。当计时器触发时,您的工作流代码可以执行通知活动并以适当的失败状态终止工作流。

    【讨论】:

      【解决方案2】:

      http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-timeout-types.html

      对于与活动相关的超时,简短的回答是您的决策者(即工作流)逻辑应该处理它。一旦验证了逻辑并进行了重试,您就不必担心事情会超时。

      对于工作流超时,您需要检查工作流历史记录/状态以确定它是否超时。您绝对可以列出工作流执行,但您可能必须直接通过 SWF API(即不通过 Flow)。无论如何,您都希望这样做以捕获失败的工作流。

      我已经使用并看到与 SWF 一起使用的一种模式是使用一种外部方式来跟踪您通过 SWF 调度的工作(想想数据库),并使用它来检查已启动的工作和从未完成。工作流本身会在完成时(或完成主要工作时)更新它,因此很容易找出哪些工作流有问题。

      【讨论】:

      • 谢谢;我希望有一种简单的内置方法可以在我缺少的 Flow 中处理它,但是在外部执行它并不太麻烦。
      • 是的。 Flow 只是为了方便(即 SWF api 在您开始时可能会令人生畏)。话虽这么说,您可能应该了解引擎盖下的内容:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 2017-07-07
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多