これはrabbitmq Webサイトで見つけたので、下の関連部分を引用しました。
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 つのコンシューマーのみを持つことをお勧めします。
これらはガイドラインにすぎないため、テストを行って、何が最適かを確認する必要があります。
このスレッドには、こことここにいくつかの洞察があります。
これらすべてのガイドラインにもかかわらず、この投稿は、複数の接続を使用してもパフォーマンスに影響しない可能性が高いことを示唆しています. クライアント側とサーバー(rabbitmq)側のどちらについて話しているのかは特定されていませんが。もちろん、より多くの接続でより多くのシステムリソースを使用するという1つのポイントがあります. これが問題ではなく、より多くのスループットが必要な場合は、この投稿のように複数の接続を使用することをお勧めします複数の接続により、より多くのスループットが可能になることを示唆しています。その理由は、複数のチャネルがあっても、一度に 1 つのメッセージしか接続されないためと思われます。したがって、大きなメッセージが接続全体をブロックするか、1 つのチャネルの多くの重要でないメッセージが同じ接続で別のチャネルの重要なメッセージをブロックする可能性があります。ここでもリソースが問題です。1 つの接続ですべての帯域幅を使い果たしている場合、追加の接続を追加しても、1 つの接続に 2 つのチャネルを使用するよりもパフォーマンスが向上しません。また、各接続はより多くのメモリ、CPU、およびファイルハンドルを使用しますが、スケーリング時には問題になる可能性がありますが、それは問題ではないかもしれません.