で約1-2 MSG /秒私は、あなたのコードを実行するときにNodeJSはシングルスレッドであることを知っていると仮定していますあなたの質問がどこから来るのですか?
言語はチャネル/コンシューマが座っているスレッドをブロックするため、スレッドベースの言語では、「スレッドごとの1チャネル」ルールが重要です。 consume
コールが発生し、メッセージが表示されるのを待ってスレッドがブロックされます。
これは、スレッドをサポートする言語で、チャネルごとにスレッドが1つ必要な理由です。
しかし、NodeJSでは、サブスクライバがメッセージを消費する呼び出しは非ブロックです。
これは、安全に1 channel per thread
という概念を放棄できることを意味します。
私自身のNodeJSとRabbitMQコードは、アプリケーションの1つのインスタンスで何百ものチャンネルを開いていることがよくあります。
チャンネルは安価で簡単に開くことができます。メッセージプロデューサやコンシューマを設定することも安いです。実際のコストは、1)接続中、2)メッセージを受け取ったら実際の作業を行うことです。
これは消費者を拡大することです。 NodeJSとRabbitMQを見るときは、メッセージスループットを監視して、アプリケーションの新しいインスタンスをいつ生成するかを判断する必要があります。一貫してキューが増えていて、すべてのメッセージが処理されていない場合は、コンシューマの新しいインスタンスを生成する必要があります。
追加のノートのカップル:
私は非常にあなたのNodeJS/RabbitMQのニーズにhttps://github.com/arobson/rabbotを使用することをお勧めします。私はRabbitMQのための "シンプルな" NodeJSライブラリをたくさん使ってきましたが、それらはすべて私が受け入れがたいと判断した制限があります。 RabbotはRabbitMQでの作業をより簡単にするために、より優れた抽象レイヤーを備えていますが、必要な柔軟性を提供します。
私のRabbitMQとNodeJSコースは、https://sub.watchmecode.net/guides/microservices-with-rabbitmq/ - スクリーンキャスト、電子ブック、業界専門家とのインタビューで、RabbitMQとNodeJSのスピードアップに役立ちます。ただし、screecastはWascallyをメインライブラリとして使用しています。これはRabbotの前身であり(Rabbotの内部構造に大きな変更を加えたときにRabbotに名称変更されました)
私が話しているガイドラインはこの記事に記載されています:http://stackoverflow.com/questions/10407760/is-there-a-performance-difference-between-pooling-connections-or-channels-in-ラブ – Towerman