2016-04-06 8 views
0

キュー「Q1」があり、複数のプロデューサがこのキューにパブリッシュしていて、複数のコンシューマがこのキューから読み取っているとします。配信ハンドラ内でのパブリッシュの呼び出しrabbitmq

ここで、各消費者は 'Q1'からメッセージを処理し、もう一度 'Q2'/'Q3'という別のキューに入れます。

どのようにチャネルをそれに付随させるべきですか?私は任意のキュー(Q1とQ2/Q3)と複数のコンシューマチャネルに公開する単一のプロデューサチャネルを作成しました。 1つのプロデューサチャンネルで作業しても大丈夫ですか?またはいくつかの同期に関する問題がありますか?

+0

はQ1からQ2/Q3にそれの存在中で変わらないメッセージであるのに役立ちます願っていますか? 「関連チャンネル」とはどういう意味ですか?そして、どのような同期の問題がありますか?プロデューサーがメッセージを生成しています。 – cantSleepNow

+0

Q1からQ2/Q3にプッシュするとメッセージが変更されます。 「関連チャンネル」とは、メッセージを公開または消費するために使用されるチャンネルを意味します。通常、複数のスレッド間で同じチャネルを共有するのではなく、スレッドごとにチャネルを使用するほうがよいと提案されています。しかし、単一のプロデューサチャネルのみを使用する場合は問題はありますか? – user1200611

+0

技術的にはそうではありません。私はC++クライアントlibを使用しています。そこには、クライアントがキューに登録し、メッセージを送信してから受信し、すべて同じチャネルを使用する単純な例があります。 https://github.com/alanxz/SimpleAmqpClient/blob/master/examples/simple_connect.cpp – cantSleepNow

答えて

0

一般に、スレッドのためのチャネルを持つことがベストプラクティスです。

同じチャネルを複数のスレッドで使用する場合は、アクセスを同期する必要があります。クライアントの実装があります。

ここで、1つのチャネルを使用してさらに多くのキューにパブリッシュする場合は問題ありませんが、シリアル化する必要があります。

パフォーマンスを求めている場合は、各スレッドが自分のチャンネルを持つマルチスレッドパブリッシャーを持つ方がよいでしょう。

チャンネルの作成は、リソースの面で非常に「安い」ので、他のチャンネルを使用するのを恐れないでください。質問は少し一般的なもので

、私はそれが

+0

私の主な関心事は、私は内部配信からbasicPublishメソッドを呼び出して、Q1からQ2/Q3にメッセージを移動することです。さあ、Q1のキューには20のコンシューマが接続されており、各コンシューマには独自のチャネルがあります。今では消費者の中で私はbasicPublishを 'producerChannel'に呼び出し、すべての消費者が共有します。 – user1200611

+0

配信の中で '公開 'を呼び出すことができますが、別のチャンネルを使用する必要があります。私はこの記事が非常に便利であるhttps://dzone.com/articles/rabbitmq-amqp-channel-bestを見つけました – Gabriele

関連する問題