20

Node.js で amqplib を使用していますが、コードのベスト プラクティスがよくわかりません。

基本的に、私の現在のコードはamqp.connect()、Node サーバーの起動時に を呼び出し、各プロデューサーと各コンシューマーに対して異なるチャネルを使用し、実際にそれらを閉じることはありません。それが意味があるかどうかを知りたいのですが、メッセージを公開するたびに、チャネルを作成して公開し、閉じる必要があります。そして、接続はどうですか?一度接続してから、サーバーの存続期間中開いたままにしておくのは「良い習慣」ですか?
コンシューマー側 - 単一の接続と単一のチャネルを使用して、複数のキューをリッスンできますか?

説明ありがとうございます

4

1 に答える 1

32

一般に、メッセージごとに接続とチャネルを開いたり閉じたりすることはお勧めできません。接続は長期間存続し、接続を開いたり閉じたりするにはリソースが必要です。チャネルの場合、それらは接続と TCP 接続を共有するため、より軽量になりますが、それでもメモリを消費するため、使用後に開いたままにしないでください。

スレッドごとに 1 つのチャネル、およびコンシューマーごとに 1 つのチャネルを持つことをお勧めします。ただし、公開する場合は、同じチャネルを使用してもまったく問題ありません。ただし、操作によっては、プロトコルが特定の状況 (キューの存在チェックなど) でチャネルを強制終了する可能性があることに注意してください。そのための準備をしてください。多くのクライアント実装では、チャネルの最大数にソフト (構成可能) およびハード (通常は 65535) の制限があります。

要約すると、ユースケースに応じて、1 つまたはいくつかの接続を使用し、必要なときにチャネルを開き、必要に応じて共有しますが、完了したらチャネルを閉じることを忘れないでください。

rabbitmq のドキュメントでは、接続とチャネルの性質について説明しています (ドキュメントの終わり)。そして、この質問に対する受け入れられた回答には、この件に関する良い情報があります。

于 2017-06-05T06:34:43.983 に答える