私は最近、メッセージング システムについて調べていて、具体的にはRabbitMQとNServiceBusの両方を調べました。私が理解しているように、メッセージが何らかの理由で失敗した場合、すぐに何度も再試行されます。両方のシステムは、後で、たとえば 5 秒後に再試行する可能性を提供します。5 秒が経過すると、メッセージが何度も再送信されます。
ドメイン駆動設計の実装(p.502)で Vaughn Vernon を引用します。
これを処理するもう 1 つの方法は、おそらく Capped Exponential Back-off を使用して、成功するまで送信を再試行することです。RabbitMQ の場合、再試行はかなりの時間失敗する可能性があります。したがって、メッセージの NAK と再試行を組み合わせて使用することが最善の方法です。それでも、プロセスが 5 分ごとに 3 回再試行する場合は、これで十分です。
NServiceBus の場合、これは第 2 レベルの再試行と呼ばれ、再試行が発生すると複数回発生します。
なぜ複数回発生する必要があるのですか?5 分ごとに再試行しないのはなぜですか? 5 分後の最初の再試行が失敗し、おそらく数ミリ秒後の 2 回目の再試行が成功する可能性はどれくらいですか?
また、何らかの構成のために必要がない場合(そうですか?)、私が見つけたすべての例で複数回の再試行が行われるのはなぜですか?