我正在使用亚马逊的Flow框架for Java开展一个相对简单的工作流程。我想我现在对所有正在发生的事情有了很好的把握,但我还有一个领域我仍然不确定:我应该如何处理超时?
我的工作流程的主要超时是工作流本身的executionStartToCloseTimeoutSeconds,但我想这个过程是相同的,无论哪个超时触发。似乎大部分时间,当任务超时时,它只是有点消失。我希望能够知道这种情况何时发生并做某事(例如发送电子邮件或以某种方式记录)。我四处搜索,找不到任何有关超时发生通知的例子。
答案 0 :(得分:2)
对于与活动相关的超时,简短的回答是你的决策者(即工作流程)逻辑应该处理它。一旦验证逻辑并进行重试,您就不必担心事情会超时。
对于工作流程超时,您需要检查工作流程历史记录/状态以确定其超时。您绝对可以列出工作流程执行,但您可能必须直接通过SWF API(即不通过Flow)。无论如何,您都希望能够捕获失败的工作流程。
我使用并看到与SWF一起使用的模式是通过外部方式跟踪您通过SWF调度的工作(想想数据库)并使用它来检查已启动的工作和从未完成。工作流本身在完成时(或者当它完成主要工作时)更新它,因此找出哪些工作流有问题是微不足道的。
答案 1 :(得分:2)
活动超时以Exception的形式传递给工作流代码,并且可以轻松处理。
恕我直言工作流程执行超时类似于Unix中的 kill -9 。它会杀死工作流程而不会给它执行清理的机会。因此,它的主要用途是确保破坏的工作流实例不会永远保持打开状态。
对于所有业务级别超时,不依赖于工作流程超时,而是使用计时器。当计时器触发您的工作流时,代码可以执行通知活动并以适当的故障状态终止工作流。