2017-02-14 5 views
0

2つのRabbitMQノードのクラスタで作業しており、RabbitMQ Javaドライバを使用してノードと対話しています。ヘッダーバインディングと永続キューに基づいてメッセージをキューに送信する「ヘッダー」交換を使用しています。RabbitMQの複数のノードにキューを定義する

問題は、1つのノードに対してキューが定義されていることです。何らかの理由でこのノードがクラッシュした場合、このノードのキューに到着するメッセージは失われます。

キューホームノードを保持している別のノードが到達不能であることを検出した場合、RabbitMQにキューホームノードを変更するよう通知する方法はありますか?そして、ノードが再び現れたときにメッセージを回復するには?

今のところ、この問題を解決するために高可用性キューを使用していますが、パフォーマンスはかなり悪いです。

答えて

1

buをdelivery_modeに設定してキューを丈夫に宣言する必要があります。この場合、メッセージのミラーリング機能は必要ありません。このようにして、ノードが再起動されてメッセージが保存されると、キューは元の状態に戻ります。 the second tutorialの詳細実際に私はチュートリアルではJavaでどのようにそれが表示されていませんが、それはthere in phytonです。javadocを参照する必要があります。おそらくは 'publish'メソッドのパラメータでもあります。

+0

はい、これを試しました。ノードが再び起動したときにノードがクラッシュする前に配信されたメッセージを回復します。しかし、ノードが停止している場合、このノードをホーム・ノードとするキューは、ノードが再び起動するまで、新しいメッセージを無視しています。 – Kraiss

関連する問題