2017-06-16 3 views
0

Rabbitmqクラスタセットアップ(HAなし)があります。私の消費者は春のアプリケーションで、次の使用可能なノードに接続するボックスからフェールオーバーメカニズムを提供します。RabbitMQのすべてのノードのキュー宣言

キューはミラー化されていないので、キューを前に宣言しても問題ありません。最初のノードがダウンすると、2番目のノードに接続が確立されます。これは理にかなっていますか?

もう1つの質問は、Rabbitmqクラスタの上にロードバランスがあるとします。ロードバランスを使用してアプリケーションが接続されます。キューはすべてのノードで宣言されるか、またはLBによるルーティング戦略に基づいてノード上で宣言されますか。

答えて

0

最初のシナリオでは、接続が確立されるとフェールオーバーブローカインスタンスでキューが宣言されます。

すべてのノードで事前に宣言したい場合は、ノードごとに接続ファクトリが必要で、各接続ファクトリにはRabbitAdminが必要です。

また、それぞれに接続を開くには何かが必要です(RabbitAdmin自身が接続リスナーとして登録されます)。

各接続ファクトリでSmartLifecycleを実装し、createConnection()を呼び出すBeanを追加すると、これを行うことができます。

要素を選択的に宣言することもできます。 Conditional Declarationを参照してください。デフォルトでは

、すべてのキュー、取引所、およびバインディングは、アプリケーションのコンテキストで(auto-startup="true"を持っている)すべてのRabbitAdminのインスタンスによって宣言されています。

1.2リリースからは、条件付きでこれらの要素を宣言することができます。これは、アプリケーションが複数のブローカに接続し、特定の要素を宣言するブローカを指定する必要がある場合に特に便利です。

関連する問題