Orleans 根據預設,訊息的傳遞保證 最多一次 。 或者,如果您在超時時設定重試,那麼Orleans將會提供至少一次的傳送。
更詳細:
- 中的每個 Orleans 訊息都有自動逾時(您可以設定確切的逾時)。 如果回覆沒有準時抵達,傳回的 Task 會因超時異常而中斷。
- 您可以設定 Orleans 為在逾時時執行自動重試。 根據預設,它 不會 執行自動重試。
- 您的應用程式碼也可以選擇在超時時實作重試。
Orleans如果系統設定為不執行自動重試(預設設定),而且您的應用程式不會重新傳送訊息,Orleans則最多提供一次訊息傳遞。 訊息要麼被傳遞一次,要麼完全不傳遞。 它從來沒有交付過兩次。
在具有重試機制的系統中(無論是執行時期還是應用程式),訊息可能會多次送達。 Orleans 目前不會永久儲存已送達或隱藏後續傳遞的訊息。 (我們相信這將是相當昂貴的。因此,在重試的系統中, Orleans 不保證最多一次傳遞。
如果您持續無限期重試, 訊息最終就會送達,因此提供至少一次的傳遞保證。 請注意,「最終到達」是執行環境需要保證的事情。 這不會因為您持續重試而自動發生。 Orleans 提供最終交付,因為粒子永遠不會進入永久失敗狀態,而失敗的粒子最終會在另一個筒倉上重新啟動。
總結:在未重試的系統中, Orleans 保證最多一次訊息傳遞。 在具有無限重試的系統中, Orleans 保證至少一次(且 不 保證最多一次)。
這很重要
技術Orleans報告不小心只提到第二個選項與自動重試。 預設情況下,它未能提及在沒有重試的情況下,Orleans 提供的是最多一次傳遞。