Amazon Simple Workflow Service 活动任务取消 - Amazon Simple Workflow Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Simple Workflow Service 活动任务取消

取消活动任务让决策程序能够结束不再需要执行的活动。Amazon SWF 使用合作取消机制,不会强行中断正在运行的活动任务。您必须给您的活动工作程序编程,以处理取消请求。

决策程序可决定在活动任务正在处理决策任务时取消该活动任务。要取消活动任务,决策程序可使用带 RequestCancelActivityTask 决策的 RespondDecisionTaskCompleted 操作。

如果活动工作程序尚未获得活动任务,则服务将取消任务。请注意,存在一种潜在的竟态条件,活动工作程序可在此条件中随时获取任务。如果任务已分配给活动工作程序,则该活动工作程序将被请求取消任务。

在这个示例中,将会发送取消订单信号到工作流程执行。

https://swf.us-east-1.amazonaws.com SignalWorkflowExecution {"domain": "867530901", "workflowId": "20110927-T-1", "runId": "9ba33198-4b18-4792-9c15-7181fb3a8852", "signalName": "CancelOrder", "input": "order 3553"}

如果工作流执行收到信号,Amazon SWF 将返回类似于以下内容的请求。Amazon SWF 将生成一个决策任务,通知决策程序处理信号。

HTTP/1.1 200 OK Content-Length: 0 Content-Type: application/json x-amzn-RequestId: 6c0373ce-074c-11e1-9083-8318c48dee96

当决策程序处理决策任务并查看历史信号时,决策程序会尝试取消具有 ShipOrderActivity0001 活动 ID 的未解决活动。活动 ID 在排定活动任务事件的工作流程历史中有提供。

https://swf.us-east-1.amazonaws.com RespondDecisionTaskCompleted { "taskToken":"12342e17-80f6-FAKE-TASK-TOKEN32f0223", "decisions":[{ "decisionType":"RequestCancelActivityTask", "RequestCancelActivityTaskDecisionAttributes":{ "ActivityID":"ShipOrderActivity0001" } } ] }

如果 Amazon SWF 成功接收取消请求,将会返回与下面类似的成功 HTTP 响应:

HTTP/1.1 200 OK Content-Length: 0 Content-Type: application/json x-amzn-RequestId: 6c0373ce-074c-11e1-9083-8318c48dee96

取消尝试以 ActivityTaskCancelRequested 事件的形式记录在历史中。

如果任务成功取消(如 ActivityTaskCanceled 事件所示),您需要对决策程序进行编程,使其在任务取消后采取相应的步骤,例如关闭工作流执行。

如果活动任务无法取消(例如,任务完成、失败或超时而不是取消),则决定程序应接受活动结果,或执行使用案例所需的任何清理或缓解措施。

如果活动工作程序已获得活动任务,则取消请求将通过任务检测信号机制发送。活动工作线程可定期使用 RecordActivityTaskHeartbeat 向 Amazon SWF 报告任务仍在进行中。

请注意,虽然建议执行长期运行的任务,但不需要活动工作程序检测信号。任务取消需要记录定期检测信号;如果工作程序不检测信号,则不能取消任务。

如果决策程序请求取消任务,则 Amazon SWF 会将 cancelRequest 对象的值设置为 true。cancelRequest 数据元是 ActivityTaskStatus 数据元的一部分,由服务响应 RecordActivityTaskHeartbeat 而返回。

Amazon SWF 不会阻止已请求取消的活动任务的成功完成;如何处理取消请求取决于活动。根据您的要求,对活动工作程序进行编程,以取消活动任务或忽略取消请求。

如果您希望活动工作程序指出该活动任务的工作已取消,请对其进行编程以响应 RespondActivityTaskCanceled。如果您希望活动工作程序完成任务,请对其进行编程以响应标准 RespondActivityTaskCompleted

当 Amazon SWF 收到 RespondActivityTaskCompletedRespondActivityTaskCanceled 请求时,会更新工作流执行历史并安排决策任务以通知决策程序。

对决策程序进行编程以处理决策任务和返回任何附加决策。如果活动任务被成功取消,请对决策程序进行编程以执行需要继续的任务或关闭工作流程执行。如果活动任务未成功取消,请对决策程序进行编程以接受结果、忽略结果或安排任何必要的清除。