0

心配する必要はありません。コンシューマーをクラスターに再接続させて、キューを再作成することができますよね? キューが元々耐久性があるとマークされていなかった場合のみ。再作成中のキューが永続的としてマークされている場合、それらを別のノードから再宣言すると、醜い 404 NOT_FOUND エラーが発生します。 これにより、障害が発生したノードのキュー内のメッセージが、クラスターに復元したときに消えなくなります。その特定のキュー名をクラスターに戻す唯一の方法は、障害が発生したノードを実際に復元することです。しかし、コンシューマーが再作成しようとするキューが永続的でない場合、再宣言は成功し、それらを再バインドして追跡を続ける準備が整います。

著者は、耐久性のあるキューは、失われないデータを使用するために再宣言できないと述べていますが、これを理解するにはどうすればよいですか?

4

1 に答える 1

1

問題は、RabbitMQ がパブリッシュされたメッセージを保持する場所にあります。ノード A でキューを宣言すると、キュー メッセージはそのノードに存在します。レプリケートされるのはキュー メタデータ、つまりキュー プロパティですが、メッセージはレプリケートされません。したがって、ノード A が停止した場合、そのノードには、そのキューにパブリッシュされたメッセージがあります。

ここで、ノード B に移動して、ノード A の場合と同様に、そのキューを永続的に宣言し直すとします。その手順が許可された場合、ノード B からのすべてのメッセージが失われます。これは、ブローカがキューが存続していると見なすためです。ノードBで。

于 2012-11-01T11:47:22.223 に答える