Amazon Simple Workflow Service
开发人员指南 (API Version 2012-01-25)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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 会返回与下面类似的成功 HTTP 响应。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 请求时,它会更新工作流程执行历史并排定决策任务以通知决策程序。

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