1

AMQP でルーティング マジックを実行したいと思います。私のセットアップは、コンシューマー/プロデューサー側に Pika を使用した Python と AMQP サーバー用の RabbitMQ です。

私が達成したいこと:

  1. 単一の取引所にメッセージを送信する
  2. (ここに魔法を入れる)
  3. 次のようにメッセージを消費します。

    • サブスクライバーの 1 つのセットは、ルーティング キーに基づいて取得できる必要があります。
    • 1 組のサブスクライバーがすべてのメッセージを取得する必要があります。

      注意が必要なのは、2 番目のセットのいずれかのサーバーがメッセージを受信した場合、2 番目のセットの他のサーバーはメッセージを受信しないことです。最初のセットのすべてのサーバーは、引き続きこのメッセージを消費できるはずです。

これは単一のbasic_publish呼び出しで可能ですか、それともメッセージをルーティング交換 (最初のコンシューマー セットの場合)"グローバル" エクスチェンジ (コンシューマーの 2 番目のセットの場合) に送信する必要がありますか?

説明:

私が達成したいのは、メッセージを発行するための単一の呼び出しであり、2 つの異なるコンシューマー セットによって受信されます。

ケース 1 : ルーティング キーに基づいてメッセージを受信するだけです (つまり、ルーティング キーを含むメッセージは、foo現在そのトピックに関心のあるすべてのコンシューマーによって受信されます)。

ケース 2 : これは基本的にワーカー キューの RabbitMQ チュートリアルに似ています。ラウンド ロビン方式でディスパッチされたメッセージを受信する多くのワーカーがあります。1 人のワーカーのみがメッセージを受信します

それでも、特定のルーティング キーに関心のあるコンシューマーが受信するメッセージは、単一の API 呼び出しによって生成された、ワーカーが受信するメッセージとまったく同じである必要があります。

(私の質問が理にかなっていることを願っています。私は AMQP の用語にあまり詳しくありません)

4

1 に答える 1

1

まず、topic交換を使用し、キューごとに異なるルーティング キーを使用してメッセージを発行する必要があります。コンシューマーがバインディング キー (または一致するパターン) でキューをバインドすると、魔法が起こります。一部の消費者は、ルーティング キーをバインディング キーとして使用するだけです。ただし、2 番目のセットでは、バインド キーにワイルドカード パターンが使用されます。

ケース 1の場合、コンシューマごとにキューを作成し、各キューを適切なルーティング キーにバインドする必要があります。

ケース 2の場合、ルーティング キーを使用して 1 つのキューを作成し、#各ワーカー コンシューマーがそれを消費するようにします。ブローカーはラウンドロビン方式でワーカーにディスパッチします。

これは、RabbitMQ でどのように見えるかのスクリーンショットです。この例では、「ケース 1」からの 2 つのコンシューマー (Foo と Bar) と、すべてのワーカーが「ケース 2」を満たすための 1 つのキューがあります。

ここに画像の説明を入力

このモデルは、すべての AMQP 準拠のブローカーでサポートされる必要があり、ベンダー固有の機能強化は必要ありません。

于 2011-06-10T14:53:02.690 に答える