2

spring-amqp を使用して、rabbitmq ノード (A、B、および C) のクラスターに接続します。クラスター内の rabbitmq ノードの 1 つがシャットダウンしたとします (C がシャットダウンします)。また、ノード C への接続を使用していた 2 つのメッセージ受信者 ( Receiver_1 と Receiver_2 ) があるとします。C がダウンすると、Receiver_1 と Receiver_2 は自動的に接続を切り替えて A または B に接続しますか? そして、C が再び現れるとどうなりますか? 一部のレシーバー接続は C を使用するように再配布されますか?

4

1 に答える 1

2

フェイルオーバーは、RabbitMQ 自体ではサポートされていません。RabbitMQ クラスター内のノードがダウンすると、新しいマスターが選出され、残りのクラスターのビジネスは通常どおり続行されます。

したがって、あなたの例では、Receiver_1 と Receiver_2 は、C がダウンした場合を処理する必要があり、代わりに A または B に接続しようとすることを知っています。

これに関する公式ドキュメントは、http ://www.rabbitmq.com/clustering.html#clients で確認できます。

個人的には、haproxy (http://haproxy.1wt.eu/) を使用して、すべてのクライアントの接続を負荷分散しています。haproxy は負荷を分散するだけでなく、ノードがオフラインになったことを自動的に検出し、すべての接続を別のライブ ノードに再ルーティングします。そうは言っても、シームレスにはなりません。アプリケーションは引き続き切断されるため、例外をキャッチして再接続を試みる必要があります。

于 2012-11-01T23:32:31.397 に答える