有没有办法杀死/重新启动 AWS SWF 中长时间运行的任务?有时我们的一些任务运行时间更长,我们希望手动终止某个任务(通过 UI 或以编程方式)并在可能的情况下重新启动该任务。如何做到这一点?
2 回答
控制台是手动终止工作流的选项。
您还可以将超时设置为整个工作流执行时间或单个活动。这可以在您注册活动或开始活动时设置(defaultTaskStartToCloseTimeoutSecond)。
目前尚不清楚您使用的是什么语言。
如果您使用的是 java,那么您应该查看Flow Framework 中的指数重试。如果它失败,这会使 SDK 重新启动您的活动。
预计长时间运行的活动将使用RecordActivityTaskHeartbeat进行心跳。如果活动进程挂起或崩溃,它会在短心跳间隔后导致超时失败,而不是长时间的任务执行超时。
工作流代码(决策者)始终可以通过RequestCancelActivityTask决策请求活动取消。取消请求作为RecordActivityTaskHeartbeat调用的输出返回。Activity 实现应该取消自身并使用RespondActivityTaskCanceled API 调用向服务报告。
有关取消活动的 AWS Flow Framework 方式,请参阅AWS Flow Framework 开发人员指南的错误处理部分。
有时活动实现不支持心跳和自我取消。解决方案是执行另一个终止第一个活动执行的终止活动。例如,在 Unix 下,这样的 kill 活动可以为实现第一个的进程发出“kill -9”命令。