0

QPID AMQP

ネットワーク トラフィックの再評価について質問があります。Machine A に Publisher があるとします。Qpid ブローカーはマシン B で実行されています。マシン C とマシン D の 2 人のサブスクライバーがいます (どちらも同じトピックにサブスクライブしています)。ここで、トポロジを想像してください。
A-->B-->X-->C | D (パブリッシャー A は B に接続され、サブスクライバー C および D は中間ノード X を介してブローカーに接続されます) C および D のトピックに一致する A によってパブリッシュされたメッセージは、両方によって受信されます。エッジ b->x はメッセージを 2 回 (b->x->c で 1 回、b->x->c で 2 回目) 伝送します。または、AMQP/qpid フレームワークは、メッセージを B から X に 1 回送信してから、個々のサブスクライバーにコピーを送信するのに十分なほどインテリジェントですか (したがって、b->x のネットワーク トラフィックが少なくなります)。私が考えたのは、X は何も知らないので、サブスクライバーごとにプライベート サブスクリプション キューがある場合 (または、共有キューがあり、メッセージを消費する代わりに閲覧/コピーしている場合でも)、メッセージは b->x を 2 回通過することです。

この質問は QPID に固有のものではありません。他のブローカー ベース (RabbitMQ) およびブローカーレス メッセージング フレームワーク (Zero MQ、LBM/UMS) のソリューションを知りたいです。Zero Mq がよりスマートなソリューションを提供しようとしている記事http://www.250bpm.com/pubsub#toc4を読みましたが、複数のコピーを送信するかどうかを中間ホップがどのように知るか (私はネットワーキングではありません)専門家なので、何かわかりにくいものがあるかもしれませんので、どんな助けも本当に感謝しています)

4

2 に答える 2

1

X は別の Qpid ブローカーであり、「フェデレーション」機能を介して B に接続されていると想定しています。その場合、メッセージが B から X に 2 回転送されることはありません。

シナリオの他の要件に応じて、これを構成するさまざまな方法があります。

1 つ目は、X を B に静的にリンクすることです。X がサブスクライブするために B にキューを作成し、その Q を問題の交換にバインドして、C と D の両方のメッセージが一致するようにし、qpid-route を使用してブリッジを作成します。 C と D は、X 上のその交換に接続してバインドし、A によって公開されたメッセージを期待どおりに受信します。この場合、C または D がアクティブであるかどうかに関係なく、メッセージは常に B から X に流れます。別のコンシューマ E を追加する場合、B のブリッジされたキューにバインディングを静的に追加する必要がある場合があります。

2 番目のオプションは、動的ルーティングを使用することです。これにより、X から B へのバインディング情報の伝播が自動的に処理され、X 上のアクティブなバインディングでメッセージが必要な場合にのみメッセージが B から X に流れるようになります。

于 2012-04-17T09:19:44.247 に答える
0

RabbitMQはまた、このような中間リンクを介してメッセージを1回だけ伝播します(そして、ダウンストリームのコンシューマーが実際にメッセージを見ることになった場合にのみ、メッセージは送信されます)。

于 2012-04-17T09:56:38.750 に答える