20

私の知る限り、直接交換の適切な使用例はありません。それを使用して実行できることはすべて、ファンアウト交換で実行できるため、より拡張性があります。

具体的には、RabbitMQ in Actionを読む際に、著者は次のようなユースケースを数多く参照しています。「ユーザーが写真をアップロードするときにサムネイルを生成する必要があるとします。しかし、その後のマーケティングでは、アップロードに対してポイントを付与するように指示されます。写真。RabbitMQを使用すると、別のキューを作成するだけで、プロデューサー側で作業を行う必要はありません。」

しかし、それは、プロデューサー側でファンアウト交換を作成する先見の明がある場合にのみ当てはまります。私の理解では、直接交換はこれを達成できず、交換とキューの間の緊密な結合が実際に必要な場合にのみ適切です(これはメッセージングシステムのポイントであるため、そうではありません)。

これは正しいですか、それとも実際のユースケースがありますか?

4

3 に答える 3

22

ファンアウト交換と比較して、直接交換では、メッセージのルーティング キーに基づいてフィルタリングを行い、どのキューがメッセージを受信するかを判断できます。ファンアウト交換では、そのようなフィルタリングはなく、すべてのメッセージはバインドされたすべてのキューに送られます。

したがって、同じルーティング キーでバインドされた複数のキューとの直接交換があり、すべてのメッセージがこのキーを持っている場合、ファンアウト交換と同じ動作になります。これについては、RabbitMQ Web サイトのチュートリアル 4 で詳しく説明されています。

画像アップロードのユースケースでは、以下を使用できます。

  • 2 つのキュー (サムネイル ワーカー用に 1 つ、スコア計算ワーカー用に 1 つ) を使用したファンアウト交換。ルーティング キーは無視されます。

    fanout-exchange
    |--> queue --> thumbnail-worker
    `--> queue --> score-worker
    
  • 再び 2 つのキューとの直接交換。たとえば、キュ​​ーはキーでバインドされ、image-processingこのキーを持つメッセージは両方のキューにキューイングされます。

    direct-exchange
    |--["image-processing"]--> queue --> thumbnail-worker
    `--["image-processing"]--> queue --> score-worker
    

    もちろん、この状況では、メッセージのルーティング キーがバインド キーと一致しない場合、どのキューもメッセージを受信しません。

2 つのワーカーを同じキューに配置することはできません。これは、メッセージがそれらの間で負荷分散されるためです。1 つのワーカーがメッセージの半分を見ることになります。

于 2016-03-24T10:41:54.397 に答える
0

ファンアウト交換またはトピック交換のことですか? ファンアウト交換は、直接交換とは大きく異なります。取引所への写真の送信は、写真があることを指定するルーティングキーとともに送信されると思います。この場合、サムネイルを生成するコンシューマーがあり、新しいコンシューマーを追加したい場合は、それを追加して同じメッセージを取得するだけで、別のことを行うことができます。つまり、ポイントを獲得できます。

ユースケースは持ちこたえます。ポイントは、取引所がもともと直接取引所として作成されていることだと思います。

于 2013-02-27T07:40:46.777 に答える
0

この回答は前のものと同じです。このページを参照すると、説明されている特定のユースケースが次のようになると思います。

直接交換は、ラウンド ロビン方式で複数のワーカー (同じアプリケーションのインスタンス) 間でタスクを分散するためによく使用されます。

于 2013-08-12T11:02:43.137 に答える