2016-07-20 2 views
0

私はメッセージキューの世界で新しく、現在RabbitMQ、ActiveMQ、およびKafkaを評価中です。 RabbitMQでは、プロデューサがRabbitMQサーバーへの接続を作成し、接続を保持しているスレッドは接続が閉じられるまでアクティブであることがわかります。これは、MUSTがRMQ Producerスレッドに情報を配信する別のスレッドであると信じています。このスレッドは、単にメッセージをキューに公開し、RMQサーバーへの接続が閉じられるまでループし続けますか?この仮定は正しいですか?どんな思考/インプットも高く評価されます。RabbitMQでは、接続とチャネルを別のスレッドで管理する必要がありますか?

ありがとうございます!

P.S:これはKafkaの動作ではありません。 [Apache Kafka: Java Producer reusability]

+0

出版社単に関連の接続/チャンネルを開き、すなわちRabbitMQのブローカーをキューにメッセージを投稿することができますし、接続/チャネルを安全に閉じて終了することができます。メッセージは消費されるまでブローカーに残っています。これを実現するにはパブリッシャーは* persistent *メッセージを投稿し、キューは*耐久性*にする必要があります。 – sameerkn

+0

ありがとう@sameerkn。基本的には、Producer/Publisherはできるだけ早くメッセージを書いて終了するべきです。数秒後、次のメッセージが表示されます。今度はConnectionをもう一度セットアップするオーバーヘッドが必要ですか?私は公開したいすべてのメッセージに対してConnectionを繰り返し作成するというオーバーヘッドを避けたいと思います。 – z00lander

+0

次に、RabbitMQブローカへのメッセージの受け入れとポストを続ける別のスレッドが必要になります。このスレッドは、メッセージ/メッセージが投稿されたばかりのPublisher/Application/MainThreadが存在するまで接続/チャンネルを開いたままにする必要があります。 – sameerkn

答えて

2

通常、アプリケーションインスタンスごとに1つのRMQ接続が必要です。その接続は、アプリケーションが起動するとすぐに開くことができます。

に接続しても、メッセージを発行したり、消費したりすることはできません。

これを行うには、チャネルを作成する必要があります。

一般的なベストプラクティスは、アプリケーションのスレッドごとに1つのチャネルです。このスレッドからのメッセージを公開する必要がありますか?スレッドのチャネルを作成します。それを公開してこのチャンネルで他のRMQ作業をしないで済んでいますか?チャネルを閉じます。

接続とは異なり、チャネルは安価で簡単に作成できます。既存のRMQ接続を介して動作し、作成するリソースはほとんどありません。

(あなたはパフォーマンス上の理由からその数を制限することがありますが)あなたは、単一の接続中のチャンネルの数千を作成することができます

関連する問題