0

キューに着信するすべてのメッセージが別のワーカーにルーティングされ、同時に特定のワーカーの 1 つと共有されるようにキューを定義したい

W(i) - 個別のメッセージを受信するワーカー

W(sp) - すべてのメッセージを受信する特別なワーカー

Q - キュー

' ------------------------------------------------------ Q--------- ----------------

|--------------------------- |--------------------- -------- |
|--------------------------- |--------------------- -------- |
W1,W(sp)-------------W2,W(sp)--------W3,W(sp)

ご覧のとおり、W1、W2、W3、W4 はすべて個別のワーカーであり、それぞれが通常のワーカーのように個別のメッセージを受け取ります。それぞれがキューから 1 つのジョブを受け取ります

ただし、各メッセージは交換 W(sp) のように共有する必要があります。どうすれば達成できますか。W(sp) が常にキューからすべてのイベントを受信できるように設定できるパラメーターはありますか?

あなたが助けることができればそれは素晴らしいことです

編集1

質問を理解するのが少し難しいことがわかりました。別のバージョンがあります

ジョブの並列処理を行いたいので、キューからジョブをラウンド ロビンで共有して、ジョブがコンシューマに一度だけ与えられるようにしたいと同時に、キューからすべてのジョブを取得する特別なコンシューマが必要です.

例えば:

消費者 - C1、C2、C3、C4

特別な消費者 - Csp

キュー - Q

Q の各ジョブは、C1、C2、C3、C4 のいずれかにブロードキャストされ、 Csp と共有される必要があります。したがって、Q からのジョブは、Csp と C(i) の 1 つとの間で共有されます。これにより、C1、C2、C3、C4 などのジョブを並列処理し、同時に Q の各ジョブを私のコンシューマ Csp で検証できます。

4

2 に答える 2

0

助けてくれてありがとう。キューに名前を付けて、キューに接続されているすべてのコンシューマーがラウンドロビンで作業を共有できるようにするだけでした。例を示します

消費者 - C1、C2、C3、C4

特別な消費者 - Csp

キュー - Q

次のように接続を作成する必要があります

放出する:

channel.exchange_declare(exchange='logs2',type='fanout')

C(i) からイベントを受信するには、キューをバインドしてキュー名と交換する必要があります

channel.queue_bind(exchange='logs2',queue='hello')

このキューに接続されているコンシューマの数に関係なく、ラウンド ロビンで一度に 1 つのジョブを受け取ります

Cspとのやり取りからのイベント受信用

channel.queue_bind(exchange='logs2',queue='special')

この特別なキューは、交換ログに接続されているため、交換からすべてのイベントを受信します2

于 2015-02-20T14:30:10.453 に答える