訊息傳遞保證和安全傳遞

 

訊息傳遞保證和狀態一致性

對於代表可設定狀態之程序的工作流程,常見使用分散式交易,根據工作流程執行個體的更新狀態來處理訊息,以保證訊息只處理一次。Workflow Manager 1.0 不依賴 MSDTC 來維護工作流程執行個體與其訊息之間的狀態一致性。相反地,在高延展性環境中,我們實作最終一致性模型,依賴 Service Bus 來確保只處理一次輸入訊息。不過,在處理工作流程的輸入和輸出訊息時,這會造成一些基本差異。

只要傳回 200 狀態碼,就保證輸入訊息 (透過通知端點傳送 - 如上所述) 傳遞至工作流程。只要訊息指定相同的 MessageId,就可不斷地重試,確保 HTTP 傳輸的可靠性不影響整體傳遞保證。在內部,訊息由通知端點收到後,會長期儲存在 Service Bus 中,直到傳遞至工作流程為止。

當工作流程收到訊息時,就會載入並開始或繼續執行。在工作流程執行的過程中,會收集並保存任何伴隨的工作,例如使用 HTTP 活動傳送的輸出訊息,直到順利儲存工作流程的更新狀態為止。此時,輸入訊息 (現在已處理) 會從長期存放裝置移除,接著會執行伴隨的工作。傳送輸出訊息,如果由於網路問題或程序錯誤而傳送失敗,則會接著重試。最後結果就是輸出訊息保證至少傳送一次,因此網頁服務可能必須設計為不斷處理訊息。回應會傳回到工作流程,讓工作流程繼續執行。