訊息傳遞保證
根據預設,Orleans 訊息傳遞保證最多提供一次。 或者,如果設定為在逾時後重試,Orleans 會改為提供至少一次的傳遞作業。
更多詳細資料:
- Orleans 中的每個訊息都有自動逾時 (可以設定確切逾時)。 如果回覆未及時抵達,則傳回的 Task 會因逾時例外狀況而中斷。
- Orleans 可以設定為在逾時的時候執行自動重試。 根據預設,不會自動重試。
- 當然,應用程式程式碼也可以選擇在逾時的時候執行重試。
如果 Orleans 系統設定為不執行自動重試 (預設設定),且應用程式不會重新傳送 – Orleans 最多提供一次訊息傳遞。 傳遞訊息一次或完全不傳遞。 永遠不會傳遞兩次。
在會重試的系統中 (由執行階段或應用程式執行),訊息可能會抵達多次。 Orleans 目前不會永久儲存哪些訊息已抵達並隱藏第二個傳遞。 (我們認為這成本甚高。)因此,在會重試的系統中,Orleans 不保證最多傳遞一次。
如果您持續無限期地重試,訊息最終會抵達,因此提供至少一次傳遞保證。 請注意,「最終會抵達」是執行階段必須保證的項目。 即使您繼續重試,其本身也不會免費。 Orleans 提供最終傳遞,因為精細度永遠不會進入任何永久失敗狀態,而且最終會在另一個定址接收器上重新啟用失敗的精細度。
因此,為了摘要說明:在不會重試 Orleans 的系統中保證最多一次訊息傳遞。 在會無限重試的系統中,Orleans 保證至少一次 (不保證最多一次)。
重要
在 Orleans 技術報告中,我們不小心只提到自動重試的第 2 個選項。 我們忘記提及預設不會重試,Orleans 提供最多一次傳遞。