本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Simple Workflow Service 活動任務取消
活動任務取消可讓決策者結束不再需要執行的活動。Amazon SWF 使用合作取消機制,不會強制中斷執行中的活動任務。您必須以程式設計活動工作者,處理取消請求。
決策者可以在活動任務處理決策任務之時,決定取消活動任務。若要取消活動任務,決策者會使用 RespondDecisionTaskCompleted
動作與 RequestCancelActivityTask
決策。
如果活動任務未有活動工作者取走,則服務會取消任務。請注意,可能的競爭條件是活動工作者隨時都可以取得任務。如果任務已指派給活動工作者,則會請求活動工作者取消任務。
在此範例中,會將取消訂單的訊號傳送給工作流程執行。
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
請求時,它會更新工作流程執行歷史記錄,並排程決策任務以通知決策者。
程式設計決策者以處理決策任務,並傳回任何額外決策。如果成功取消活動任務,請程式設計決策者,以執行繼續或關閉工作流程執行所需的任務。如果未成功取消活動任務,請程式設計決策者,以接受結果、忽略結果,或為任何必要的清理排程。