現在調査中ですが、質問させてください。回答がない場合は、わかり次第回答を投稿します。
問題は次のとおりです。
アプリケーションは、RabbitHutch.CreateBus を呼び出して IBus/IAdvancedBus のインスタンスを作成し、RabbitMQ にメッセージを発行します。インスタンスは返されますが、IsConnected フラグは false に設定されます (つまり、接続の再試行はバックグラウンドで行われます)。アプリケーションが特定の要求を処理すると、IAdvancedBus.PublishAsync が呼び出され、バスがまだ接続されていないときにメッセージが発行されます。大きな負荷がかかると、バスが RabbitMQ に接続できなかったため、アプリケーションへのリクエストがタイムアウトしてしまいます。
リクエストの処理中に RabbitMQ への接続が失われると、同じ動作が観察されます。
質問は:
バスが切断されている間、EasyNetQ はどのようにメッセージをパブリッシュしようとしますか?
接続が確立されるまで、メッセージはメモリのキューに入れられますか? もしそうなら、制限に達した後にメッセージを破棄していますか? これは構成可能ですか?
それとも、バスが強制的に RabbitMQ に接続しようとしているのですか?
それとも、メッセージを完全にダンプしていますか?
PublisherConfirms は、動作に影響を与えるように切り替えられていますか?