2013-02-07 20 views
7

私はrabbitMQ交換をどのように構成するのが良いかについていくつかアドバイスを求めています。RabbitMQとラウンドロビンのトピック交換

ラウンドロビン方式でトピック交換を使用しようとしています。各コンシューマには、トピック交換にアタッチされた独自の(一意に)名前付きキューがあります。私は交換所に、 "同じ"トピックのための各消費者キューにメッセージをラウンドロビンすることを望みます - 例えば*.logと言うことができます。

私は複数の組み合わせを試してみましたが、コンシューマキューにメッセージを同時に配信できるように思えます。これは、メッセージを各コンシューマで2回処理していることを意味します。

わかりやすくするために、私は消費者を「制御する」(開始、停止など)ために使用するファンアウト交換機を持っています。これはどんな結果でも残るはずです。

上記の成果を最大限に達成するための最善の方法はすばらしいでしょう。

+3

なぜメッセージをラウンドロビンしますか?作業を配布したい場合は、そのすべてを1つのキューに入れて、複数の「ログファイル」コンシューマにそのキューからの読み取りを依頼してください。 – kzhen

+0

同じものを探してください。この解決策を見つけましたか? – YaOg

+0

私はe2e(exchange-to-exchange)バインディングを使用してこれを解決しました。 http://stackoverflow.com/a/39577177/67065 – Raine

答えて

10

各コンシューマでは、ラウンドロビンをするために設定するという名前のキューとの間でするトピック交換

トリックはすべての労働者を持っていることです/消費者に取り付けた独自の(ユニーク)という名前のキューを持っていますすべてが独自のキューを作成するのではなく、同じキューを使用します。

"log"ワーカーのすべてに対して "log"という名前のキューを作成することができます。すべての "foo"ワーカーに対して、 "foo"と言う名前の異なるキューを作成します。リクエストは、同じキューを参照しているすべての消費者にラウンドロビンで配信されます。