これはrabbitmq websiteで見つかったので、それは下にあるので、私は以下の関連部分を引用しました。
tl; drバージョンは、アプリケーションごとに1つの接続とスレッドごとに1つの接続が必要であるということです。希望が役立ちます。
接続
AMQP接続は、一般的に長寿命です。 AMQPは、信頼性の高い配信にTCPを使用するアプリケーション レベルのプロトコルです。 AMQP接続 は認証を使用し、TLS(SSL)を使用して保護することができます。 アプリケーションをAMQPブローカに接続する必要がなくなった場合、 が突然基本TCP接続を閉じるのではなく、 がAMQP接続を正常に閉じる必要があります。
チャネル
AMQPブローカーへの複数の接続が必要なアプリケーションがあります。 しかし、多くのTCP接続を同じ時刻に開いておくことは望ましくありません。これは、システムリソースを消費し、ファイアウォールを構成するのが難しくなるからです。 AMQP 0-9-1接続は、「単一のTCP接続を共有する軽量の 接続」と考えることができるチャネルで多重化された です。
処理のために複数のスレッド/プロセスを使用するアプリケーションでは、 スレッド/プロセスごとに新しいチャネルを開き、それらの間でチャネルを共有することは非常に一般的です。特定のチャネル上の
通信は、他のチャネル上の 通信から完全に分離され、したがって、すべてのAMQP方法も クライアントがどのチャネルを把握するために使用するチャンネル番号を運ぶ 方法が(したがって、どのイベントハンドラニーズのためのものです例えば、 )。
スレッドセーフであるにもかかわらず、スレッドごとに1つのチャネルがあることが推奨されているので、複数のスレッドが1つのチャネルを送信する可能性があります。あなたのアプリケーションの観点からは、スレッドごとに1つのチャンネルを使用することをお勧めします。
さらに、1つのチャンネルにつき消費者が1人であることが推奨されます。
これらはガイドラインに過ぎないため、何が最善のものかを確認するためにいくつかのテストを行う必要があります。
このスレッドにはいくつかの洞察がありますhereとhereです。
これらのすべてのガイドラインにもかかわらず、this postは、複数の接続を持つことでパフォーマンスにほとんど影響しない可能性が高いことを示しています。クライアント側とサーバー側(rabbitmq側)のどちらを話しているのかは具体的ではありませんが、 1つの点として、より多くの接続でより多くのシステムリソースを使用することはもちろんです。これが問題ではない場合、スループットを増やしたい場合は、this postが複数の接続でより多くのスループットを可能にすることを示唆しているので、複数の接続を持つほうがよい場合があります。その理由は、複数のチャネルがあっても、一度に1つのメッセージしか接続を通過しないためです。したがって、大規模なメッセージは接続全体をブロックするか、1つのチャネル上の重要でないメッセージの多くが、同一の接続ではあるが異なるチャネルの重要なメッセージをブロックする可能性があります。もう一度リソースが問題になります。 1つの接続ですべての帯域幅を使い切っている場合、追加の接続を追加すると、1つの接続で2つのチャネルを持つ場合よりもパフォーマンスが向上しません。また、各接続は、より多くのメモリ、CPUとファイルハンドルを使用しますが、スケーリングの際には問題になるかもしれませんが、それは懸念事項ではありません。受け入れ答えに加えて
False - "チャネルスレッドセーフ チャネルインスタンスは複数のスレッドで安全に使用できます。チャンネルへのリクエストはシリアライズされ、一度に1つのスレッドだけがチャンネル上でコマンドを実行できます。それでも、複数のスレッド間で同じチャンネルを共有するのではなく、スレッドごとにチャンネルを使用する方がよいでしょう」APIドキュメントごとに – djechlin
okが編集されました。 1つのコンシューマ、1つのチャネル、1つのスレッド – robthewolf
チャネルはスレッドセーフであるかどうかは、実装によって異なります。Javaのimplは安全ですが、.netは安全ではありません。http://stackoverflow.com/a/17829906/709537 –