2016-06-13 21 views
0

メッセージングのためにRabbitMQを使用してかなり基本的なアプリケーションを作成しています。メッセージは1つのサーバーに公開され、2つ目のサーバーのダウンストリームではメッセージを消費する長期実行プロセスが発生します。RabbitMQ/AMQP HAアプリケーション:コンシューマが終了した後にキューを維持しますか?

出版社:今、私は次のように設定している

  1. が宣言直接交換myexchange
  2. 公開メッセージルーティングとの交流 myexchange にキーpayload.routingkey

Co nsumerプログラム:

  1. が宣言直接交換myexchange
  2. はキュー私の固有のキュー名
  3. バインド私の固有のキュー名(trueのオプション耐久性のあるセットで)宣言しますキューto myexchange exchange
  4. メッセージを消費する特定キュー名

私はこのプロセスがうまく機能しています。私が取り組んでいる状況は、私の消費者プログラムが死ぬと、myexchangeに公開された新しいメッセージが失われるように見えます。キューは交換にバインドされないからです。コンシューマプログラムがなくなってもメッセージがキューに入れられるため、コンシューマプログラムがオンラインに戻ってもメッセージは引き続き受信できるようになりますか?

+0

筆記クライアントにはどの言語を使用していますか? – cantSleepNow

+0

@cantSleepNow両方のクライアントにperlを使用します。私は[Net :: RabbitMQ](https://metacpan.org/pod/Net::RabbitMQ)モジュールを使用しています。 – Devin

+0

キューを宣言するときに、 "exclusive"パラメータのデフォルト値は何ですか? 「耐久性」を真にしているので、「排他」が真であれば、消費者が切断または死んだときにキューが削除されることがあります – cantSleepNow

答えて

0

私はこの質問を書いていたので、私は答えを実現するように思えました。もちろん、これが悪い考えである場合や、別の提案がある場合は、消してください。

デフォルトのエクスチェンジ(名前として空の文字列を交換)を使用すると、キューを宣言することができ、自動的にこのデフォルト交換にバインドされます(Default Exchange参照)。だからあなたの私の特定のキュー名を公開者の待ち行列に宣言してからそれを再宣言し、コンシューマスクリプトで消費し始めることができます。 AMQP/RabbitMQでは、何度も再宣言することができます。まだ存在していない場合にのみ作成されます。パブリッシャーのキューを宣言しているので、他のシステムがメッセージを受信して​​いるかどうかは関係ありません。

関連する問題