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

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

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 收到RespondActivityTaskCompleted或者RespondActivityTaskCanceled请求,它会更新工作流程执行历史并排定决策任务以通知决策程序。

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