2017-11-09 6 views
0

こんにちは、私はウサギmqの簡単な解決策を探しています。以下はウサギの設定です。メッセージを送信するためのRabbit MQブロッキングコールで、メッセージの制限値を超過するか、メッセージサイズ制限を超える正しい返信コードが返されることを確認してください。

    はウサギサーバ
  1. は、耐久性のあるオプション付きタイプトピックのやり取り(myexchange)を作成開始
  2. 耐久オプションとx-max-length-bytesを4に設定し、x-max-lengthを2に設定してキュー(myqueue)を作成します。
  3. myexchangeをmyqueueにバインドします。
  4. aqmpチャネル(channel.basicPublish(myexchange、myrouting、真、 ヌル、 "テスト" .getBytes( "UTF-8"))を用いbasic_publishを使用してメッセージをパブリッシュ、
  5. 使用パブリッシャchannel.confirmSelectような設定を確認();とchannel.waitForConfirmsOrDie();。

コード

channel = connectionFactory.getChannel(); 
channel.queueDeclarePassive("myqueue"); 
channel.confirmSelect(); 
channel.basicPublish("myexchange", "myrouting", true, 
     null, "test".getBytes("UTF-8")); 
channel.waitForConfirmsOrDie(); 

の下スニペット今ウサギMQがメッセージの数のエラーで返信されていませんが、私が送信することができた/サイズ超過超え1kbのサイズで1000メッセージ/消費者はこれらのメッセージをすべて消費する。どうすればエラーコードを取得できますか? これに関する助けてください?

答えて

0

RabbitMQチームはthis mailing listを監視し、ときどきStackOverflowに関する質問に答えます。


ここでは2つの項目を考慮する必要があります。まず、コンシューマがメッセージを消費しているため、制限に達することはありません。

第2に、キューの長さ制限に達すると、キューの先頭からメッセージが削除され、新しいメッセージのための空き領域が確保されます。 これは、キュー内で最も古いメッセージが失われることを意味します。 - docs。この動作は3.7.0で設定可能です。

ただし、エラーが返されることはないため、エラーが返されると思われる理由はわかりません。キュー制限に達すると何が起こるかについてのドキュメントは明確です。

+0

ありがとうございます。このシナリオでは、削除されたメッセージの数を取得する最善の方法は何ですか。消費者のacks/nacksメカニズムを使用して、消費されたメッセージの数を取得するように修正しました。 – vrit

+0

ありがとう、ルーク、このシナリオでドロップされたメッセージの数を取得する最良の方法は何ですか(私がデッドレターキューを使用していない場合)。消費者承認メカニズムを使用して、メッセージが正常にキューに配信されたことを確認します。 (私はキューにメッセージを送信するためにブロック呼び出しを行っていると仮定します)。 – vrit

+0

はい、メッセージが公開されたことを確認するには、[publisher confirms](https://www.rabbitmq.com/confirms.html)を使用する必要があります。デッドレター交換を使用するのは、ドロップされたメッセージの数を知る唯一の方法です。私の元の回答とこのフォローアップが十分であれば、私の回答を受け入れられた回答としてマークしてください。 –

関連する問題