メッセージング デリバリーの保証
Orleans のメッセージ配信保証では、既定で配信は最大 1 回になっています。 必要に応じ、タイムアウト時に再試行するように構成するなら、Orleans では代わりに少なくとも 1 回の配信になります。
詳細:
- Orleans のメッセージはすべて、自動でタイムアウトします (タイムアウトの時間は厳密に設定可能)。 応答が遅れて届くようであれば、返された Task は壊れており、タイムアウト例外が付きます。
- Orleans はタイムアウト時に自動的に再試行するように設定できます。 既定では、自動的に再試行することは "ありません"。
- もちろん、アプリケーション コードでもタイムアウト時の再試行を選択できます。
自動で再試行しないように Orleans システムが構成されているとき (既定の設定)、アプリケーション側で再送信しない場合、Orleans では、最大 1 回でメッセージを配信します。 メッセージは 1 回配信されるか、まったく配信されません。 2 回配信されることはありません。
(ランタイムまたはアプリケーションによる) 再試行ありのシステムでは、メッセージは複数回届くことがあります。 Orleans では現在、既に届いているメッセージを永続的に格納し、2 回目の配信を阻止する目的で何らかの操作が行われることはありません。 (そんなことをしたら、かなりのコストがかかるでしょう) そのため、再試行ありのシステムの場合、Orleans で最大 1 回の配信が保証されることはありません。
無限に再試行を続けるなら、メッセージはいずれ届き、最低 1 回の配信が保証されます。 "やがて届く" というのはランタイムで保証すべきものです。 再試行を続けても、それだけでただで届くものではありません。 Orleans で配信されるメッセージは最終的には届きます。グレインが永久に失敗を繰り返す状態になることはなく、やがては別のサイロで再度有効になります。
要約すると、再試行のないシステムの場合、Orleans では、メッセージ配信は最大 1 回保証されます。 再試行が無限のシステムの場合、Orleans では、少なくとも 1 回の配信が保証されます (最大 1 回の配信は保証 "されません")。
重要
Orleans テクニカル レポートでは間違いで、自動再試行の 2 つ目のオプションにのみ触れました。 Orleans の既定では再試行なしの場合、配信が最大 1 回になることを伝えませんでした。
.NET