【发布时间】:2012-04-03 19:17:52
【问题描述】:
有没有办法在 AWS SWF 中终止/重新启动长时间运行的任务?有时我们的一些任务运行时间更长,我们希望手动终止某个任务(通过 UI 或以编程方式)并在可能的情况下重新启动该任务。如何做到这一点?
【问题讨论】:
标签: amazon-web-services amazon-swf
有没有办法在 AWS SWF 中终止/重新启动长时间运行的任务?有时我们的一些任务运行时间更长,我们希望手动终止某个任务(通过 UI 或以编程方式)并在可能的情况下重新启动该任务。如何做到这一点?
【问题讨论】:
标签: amazon-web-services amazon-swf
控制台是手动终止工作流的选项。
您还可以将超时设置为整个工作流执行时间或单个活动。这可以在您注册 Activity 或启动 Activity 时设置 (defaultTaskStartToCloseTimeoutSecond)。
不清楚您使用的是什么语言。
如果您使用的是 java,那么您应该查看 Flow Framework 中的Exponential Retry。这会使 SDK 在失败时重新启动您的活动。
【讨论】:
预计长时间运行的活动将使用RecordActivityTaskHeartbeat 进行检测。如果活动进程挂起或崩溃,它会在短心跳间隔后导致超时失败,而不是长时间的任务执行超时。
工作流代码(决策者)始终可以通过RequestCancelActivityTask决策请求活动取消。取消请求作为RecordActivityTaskHeartbeat 调用的输出返回。活动实现应自行取消并使用RespondActivityTaskCanceled API 调用向服务报告。
有关取消活动的 AWS Flow Framework 方式,请参阅 AWS Flow Framework Developer Guide 的 Error Handling 部分。
有时活动实现不支持心跳和自我取消。解决方案是执行另一个 kill 活动来终止第一个活动的执行。例如在 Unix 下,这样的 kill 活动可以为实现第一个的进程发出“kill -9”命令。
【讨论】: