本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SWF 工作流程歷史記錄
Amazon SWF 將記錄每個工作流程執行的進度記錄在工作流程歷史記錄中。工作流程歷史記錄是每個事件自工作流程執行自開始以來之詳細、完整和一致的記錄。事件代表您工作流程執行狀態的不連續變更,例如正在排程的新活動或即將完成的執行中活動。工作流程歷史記錄包含的每一個事件,都會造成工作流程執行的執行狀態變更,例如排程和完成的活動、任務逾時和訊號。
不變更工作流程執行狀態的操作,一般不會顯示在工作流程歷史記錄中。例如,工作流程歷史記錄不顯示輪詢嘗試或可見度操作的使用。
工作流程歷史記錄有數個重要優勢:
-
讓應用程式成為無狀態,因為工作流程執行的所有資訊都存放在其工作流程歷史記錄中。
-
歷史記錄為每個工作流程執行提供一筆記錄,包括已排程的活動、它們目前的狀態及其結果。工作流程執行使用此資訊決定後續步驟。
-
歷史記錄提供詳細的稽核線索,您可用來監控執行中的工作流程執行,以及驗證完成的工作流程執行。
以下是電子商務工作流程歷史記錄的概念檢視。
Invoice0001 Start Workflow Execution Schedule Verify Order Start Verify Order Activity Complete Verify Order Activity Schedule Charge Credit Card Start Charge Credit Card Activity Complete Charge Credit Card Activity Schedule Ship Order Start Ship Order Activity
在前面的範例中,訂單等待出貨。在下列範例中,訂單已完成。因為工作流程歷史記錄是累積的,所以會附加較新的事件:
Invoice0001 Start Workflow Execution Schedule Verify Order Start Verify Order Activity Complete Verify Order Activity Schedule Charge Credit Card Start Charge Credit Card Activity Complete Charge Credit Card Activity Schedule Ship Order Start Ship Order Activity
Complete Ship Order Activity Schedule Record Order Completion Start Record Order Completion Activity Complete Record Order Completion Activity Close Workflow
透過編寫程式的方式,工作流程執行歷史記錄中的事件是表示為 JavaScript 物件標記法 (JSON) 物件。歷史記錄本身是這些物件的 JSON 陣列。每個事件都有下列項目:
-
Unix 時間格式的時間戳記
-
唯一識別事件的 ID
此外,每個事件類型都有適合該類型的不同描述屬性集。例如,ActivityTaskCompleted
事件有包含事件 ID 的屬性,對應活動任務排程的時間和開始的時間,以及保留結果資料的屬性。
您可以使用 GetWorkflowExecutionHistory 動作,取得工作流程執行歷史記錄目前狀態的複本。此外,Amazon SWF 和您工作流程決策者之間互動的一部分,決策者會定期收到歷史記錄的複本。
以下是 JSON 格式範例工作流程執行歷史記錄的一部分。
[ { "eventId": 11, "eventTimestamp": 1326671603.102, "eventType": "WorkflowExecutionTimedOut", "workflowExecutionTimedOutEventAttributes": { "childPolicy": "TERMINATE", "timeoutType": "START_TO_CLOSE" } }, { "decisionTaskScheduledEventAttributes": { "startToCloseTimeout": "600", "taskList": { "name": "specialTaskList" } }, "eventId": 10, "eventTimestamp": 1326670566.124, "eventType": "DecisionTaskScheduled" }, { "activityTaskTimedOutEventAttributes": { "details": "Waiting for confirmation", "scheduledEventId": 8, "startedEventId": 0, "timeoutType": "SCHEDULE_TO_START" }, "eventId": 9, "eventTimestamp": 1326670566.124, "eventType": "ActivityTaskTimedOut" }, { "activityTaskScheduledEventAttributes": { "activityId": "verification-27", "activityType": { "name": "activityVerify", "version": "1.0" }, "control": "digital music", "decisionTaskCompletedEventId": 7, "heartbeatTimeout": "120", "input": "5634-0056-4367-0923,12/12,437", "scheduleToCloseTimeout": "900", "scheduleToStartTimeout": "300", "startToCloseTimeout": "600", "taskList": { "name": "specialTaskList" } }, "eventId": 8, "eventTimestamp": 1326670266.115, "eventType": "ActivityTaskScheduled" }, { "decisionTaskCompletedEventAttributes": { "executionContext": "Black Friday", "scheduledEventId": 5, "startedEventId": 6 }, "eventId": 7, "eventTimestamp": 1326670266.103, "eventType": "DecisionTaskCompleted" }, { "decisionTaskStartedEventAttributes": { "identity": "Decider01", "scheduledEventId": 5 }, "eventId": 6, "eventTimestamp": 1326670161.497, "eventType": "DecisionTaskStarted" }, { "decisionTaskScheduledEventAttributes": { "startToCloseTimeout": "600", "taskList": { "name": "specialTaskList" } }, "eventId": 5, "eventTimestamp": 1326668752.66, "eventType": "DecisionTaskScheduled" }, { "decisionTaskTimedOutEventAttributes": { "scheduledEventId": 2, "startedEventId": 3, "timeoutType": "START_TO_CLOSE" }, "eventId": 4, "eventTimestamp": 1326668752.66, "eventType": "DecisionTaskTimedOut" }, { "decisionTaskStartedEventAttributes": { "identity": "Decider01", "scheduledEventId": 2 }, "eventId": 3, "eventTimestamp": 1326668152.648, "eventType": "DecisionTaskStarted" }, { "decisionTaskScheduledEventAttributes": { "startToCloseTimeout": "600", "taskList": { "name": "specialTaskList" } }, "eventId": 2, "eventTimestamp": 1326668003.094, "eventType": "DecisionTaskScheduled" } ]
有關工作流程執行歷史記錄中可顯示的不同類型事件的詳細列表,請參閲HistoryEvent 佈資料類型Amazon Simple Workflow Service API 參考。
Amazon SWF 會在執行結束後會存放所有工作流程執行的完整歷史記錄一段時間,天數可設定。這段期間稱為工作流程歷史記錄保留期,當您為工作流程註冊「網域」時會指定。本節後文會詳細討論網域。