2017-06-19 13 views
0

私は、50人のコンシューマとプリフェッチ数が約100のキューを持っています。すべてのコンシューマは、単一のJVMインスタンスからのものです。したがって、アプリケーションが停止すると、メッセージはREADY状態になりました。準備完了状態のメッセージ数は(prefetch_count *消費者数)と同じです。Rabbitmqの準備完了メッセージと未解決メッセージ

これで、READY状態のメッセージはどうなりますか?それが再配信されるのか、それとも死んだのだろうか?

答えて

0

これらは再配信されます。

消費者が具体的にメッセージを拒否した場合は、メッセージはrequeue=false(キューはデッドレター用に設定されています)で拒否されます。

+0

ありがとうございました!それはいつ再配送されますか?このシナリオを考えてみましょう。Javaの2つのインスタンスがそれぞれ50個のコンシューマとしてキューに登録され、プリフェッチ・カウントが100程度になったときに考えてみましょう.1つのJavaインスタンスがダウンするとします。デッド・インスタンスによって消費されるメッセージは、READY状態です。これらのメッセージはどうなりますか?それはいつ再配送されますか? – Thiru

+0

ブローカが接続がクローズされたことを検出すると、UNACKEDであるすべてのメッセージがREADYに戻されます。障害の発生時にREADYであったメッセージ(未実装ではない - コンシューマ・プリフェッチの両方が満杯だったため)は、キューに入れられたメッセージの後に処理されます。 –

関連する問題