2017-06-29 8 views
1

2つのノードでクラスタとして実行されているrabbitMQブローカがあります。私は、キューが作成されたノードがダウンすると、他のノードでキューを使用できないことに気付きました。他のノードからメッセージを公開しようとすると失敗します。クラスタから障害ノードを削除しても(クラスタコマンドを忘れる)、他のノードからのメッセージを公開しようとしても、その動作は同じです。メッセージレプリケーションのないRabbitmq高可用性キュー

ネットワーク間の追加負荷となるメッセージをレプリケートする簡単な理由から、キューのミラーリングを有効にしたくないです。

これを達成するためにrabbitMQで利用できる方法はありますか?

答えて

0

rabbitmqのデフォルトの動作と、まさに私が起こそうとしている動作です。キューを作成したノードがプロデューサになり、このノードがダウンすると、そのキューまたはキューまたはそれに関連付けられた交換はまったく動作しません。この問題を解決するには2つの方法があります。

  • 1つのオプションは、すべてのノードとその特定のキューの交流を購読することができ、特定のノードからのメッセージを受信するために聞きたい任意のノードに1つの別々のキューがあるということです。これは非常に良い考えではないようですが、あなたはそれのために多くのことを管理する必要があるからです。

  • 第2のオプションは、公開する前に常にキューを宣言することです。キューが利用できない場合は、新しいキューが使用され、サブスクライブするすべてのノードがリッスンできるようになり、プロデューサノードはそのキューをポストします。このオプションは、ノードがダウンしているかノードが使用できないかの問題を解決します。我々は、受信者のキューが存在することを確認する必要があり、送信前docs

から。存在しない場所にメッセージを送信すると、RabbitMQはメッセージをドロップします。メッセージを配信するハローキューを作成してみましょう:

0

のRabbitMQは、インポートおよびエクスポート定義することができます。定義は、すべてのブローカーオブジェクト(キュー、交換、バインディング、ユーザー、仮想ホスト、アクセス許可、およびパラメーター)を含むjsonファイルです。キューのメッセージは含まれません。

キューを所有するノードの定義をエクスポートし、クラスタのスレーブノードに定期的にインポートできます。このタスクの管理プラグインを有効にする必要があります。

詳細情報はこちらhttps://www.rabbitmq.com/management.html#configuration

関連する問題