1

特定のサーバーのメモリ負荷を軽減するために、クラスターの 2 つのサーバーの一部にある 2 つのキューにメッセージを配信したいトピック交換があります。私のコンシューマは定期的に遅くなり、メモリのウォーターマークが高くなることがあります。

私がこれを解決しようとした方法は、中間の直接交換を使用してメッセージをルーティングし、2 つのキューを交換にバインドすることです。

a (topic) -> a1 (direct) -> q1/q2 (bound to routing key "a")

しかし、メッセージは AMQP の意図どおりに両方のキューにルーティングされました。誰にもアイデアがありますか?私が必要としているのは、ルーティング キーが多くのキューに一致する場合でも、1 つのキューだけにルーティングする交換です。ルーティング キーを変更したくないのですが、変更することはできます。

私は、RabbitMQ を使用した選択的ルーティングを見つけました。これは、独自のルーティング ロジックを実装する必要があることを意味する可能性があります。うまくいけば、これはすでにどこかに存在しています。

4

1 に答える 1

4

おそらく、Shovel プラグイン ( http://www.rabbitmq.com/shovel.html ) を使用して、中間交換から 2 つのキューにメッセージを移動できます。

2 つのシャベルをセットアップし、どちらも直接中間交換の 1 つのキューから消費する場合、それらは入ってくるメッセージをめぐって争うことができるはずです (2 つの受信者キューが厳密なラウンド ロビン方式で受信メッセージを取得します)。次に、シャベルはそれぞれ 2 つのエンド キューの 1 つにパブリッシュし、エンド コンシューマーから ACK を介して送信できます。

于 2012-09-10T17:39:17.847 に答える