5

RabbitMQ の Java クライアントを使用して、rabbitmq 接続のセットが確立されて使用可能になる接続プーリング メカニズムを作成しました。クライアントが接続をリースすると、クライアントはチャネルを作成します。実行タスクを送信して 100 個のメッセージを送信する必要がある場合、クライアントはこれらのメッセージごとに接続をリースし、次のような API を使用してチャネルを作成します。

rqConnection = MyPoolManager.leaseConnection();
rqChannel = rqConnection.createChannel();

接続ごとに 1 つのチャネルとしてプール内にチャネルを事前に確立できますか? または、メッセージを送信する前にチャネルを常に作成できますか? 私の懸念は、チャネルを介してチャネルを作成すると、リソースが消費される可能性があることです。接続とチャネルの両方を含むクラスとチャネルを共存させることができるため、使用の必要性に先立って常に事前に作成されます。チャネルの作成によってリソースの消費やリークが発生しない場合は、現在のアプローチを続行できます。

4

1 に答える 1

14

他のグループからの追加の調査と観察に基づいて、チャネルに関するいくつかの事実を以下に示します。

  • 接続ごとのチャネル数の比率を計算する方法を指定するドキュメントはないようです。複数の接続を実行する利点と、接続ごとに複数のチャネルを実行する利点もありません。
  • 多数の接続を実行すると、多数のチャネルを実行するよりも多くのリソースを消費するようです。また、接続は特定の数のファイル記述子に制限されていますが、チャネルは制限されていません。
  • いくつかの個別のテストでは、プーリング接続とプーリング チャネルのパフォーマンス ベンチマークが類似していることが明らかになりました。

したがって、最善のアプローチは、複数のチャネルに 1 つの接続とプールを持ち、各チャネルが異なるスレッドによって提供されるようにすることです (同時実行の問題を防ぐため)。

于 2013-03-29T12:15:38.440 に答える