2017-06-04 19 views
4

Node.jsでamqplibを使用していますが、私のコードのベストプラクティスについては明確ではありません。公開するたびにチャンネル/接続を終了する必要がありますか?

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

は、任意の明確化、一般的に

答えて

9

いただきありがとうございます、それが開くのは良い練習と密接接続およびメッセージあたりのチャネルではありません。接続は長生きしており、接続を開いたり閉じたりするためのリソースが必要です。チャネルの場合、TCP接続は接続と共有されるため、軽量になりますが、メモリを消費しますが、使用後には開いたままにしないでください。

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

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

rabbitmq documentationは、接続とチャネルの性質(ドキュメントの末尾)を説明しています。そして、this質問に受け入れられた答えは、その問題に関する良い情報を持っています。

関連する問題