0

RabbitMQ でのルーティングがわかりません。キューにメッセージを生成するプロデューサー (クライアントと呼びましょう) がいくつかあるとします。たとえば、 client AB、およびCqueue にメッセージを送信しますX1

キューに応答を返すすべてのメッセージにコンシューマーが応答できるようにします。たとえば、消費者はキューからメッセージを取得X1し、何かを実行して、キューに応答を送信しますX1

クライアントは、送信されたメッセージAがキュー内のどこにあり、クライアントに送信されたメッセージがどこにあるかをどのように判断できますか?X1BC

多数の接続が予想されるため、接続ごとに 1 つのキューを宣言できません ( ~10^6)。だからここで困ってます。助言がありますか?ありがとう。

4

1 に答える 1

2

RPCチュートリアルを見る必要があると思います。あなたの説明から、それがあなたがやりたいことのように聞こえます。ただし、それにはおそらく、必要以上のキューを宣言する必要があります。

これに別の方法でアプローチします。同じ交換だけでなく、コンシューマーが消費している同じキューによってプロデューサーに返信を返す理由がわかりません。

プロデューサ P1、P2、および P3 がルーティング キー "abc.aaa.xyz" / "abc.bbb.xyz" / "abc.ccc.xyz" を使用して交換 X1 に送信するのは意味がありません。次に、キュー Q1、Q2、Q3 をバインド キー " .aaa. " / " .bbb. " / " .ccc ." で X1 にバインドするか、バインド キー "abc.*.xyz" で Q1 だけにバインドします (正確には不明です)。あなたが望むものなので、いくつかの提案をしてください)。コンシューマー C1、C2、および C3 によって消費されるもの

コンシューマーがメッセージの処理を完了すると、それ自体を識別するルーティング キーを使用してメッセージを X2 に送信します。プロデューサは、X2 にバインドされたキューから消費します。

私が言おうとしているのは、複数のコンシューマがキューから読み取る必要がないということです。それが必要なケースは 1 つだけで、それはタスク キューです。ユースケースがはっきりしないので、タスクキューが必要になる場合があります。その場合でも、プロデューサーがコンシューマーと同じタスク キューから読み取らないようにする必要があります。タスク キューとは別に、1 つのキューから 1 つのコンシューマを読み取る必要があります。1 つの交換に多くのキューがあり、1 つのキューから 1 つの交換に多くのバインディングが存在する場合もあります。

これが役立つことを願っています

于 2012-10-31T15:04:22.270 に答える