Ich nehme an, Sie wissen, dass NodeJS single-threaded ist, wenn der Code ausgeführt wird, Woher kommt Ihre Frage?
In threadbasierten Sprachen ist die Regel "1 Kanal pro Thread" wichtig, da die Sprache den Thread blockiert, auf dem der Kanal/Consumer sitzt. Sie werden zu einer Art von consume
Anruf, und der Thread wird blockieren, warten auf eine Nachricht angezeigt werden.
Dies ist, warum Sie 1 Thread pro Kanal benötigen, in Sprachen, die Threads unterstützen.
In NodeJS ist der Aufruf für einen Abonnenten zum Nachrichtenkonsum jedoch nicht blockierend.
Dies bedeutet, dass Sie das 1 channel per thread
Konzept sicher auswerfen können.
Mein eigener NodeJS- und RabbitMQ-Code hat oft Hunderte von geöffneten Kanälen in einer einzigen Instanz meiner Anwendung.
Kanäle sind billig und leicht zu öffnen. Das Einrichten eines Nachrichtenproduzenten oder -konsumenten ist ebenfalls billig. Die tatsächlichen Kosten sind 1) in der Verbindung und 2) die eigentliche Arbeit zu tun, sobald Sie eine Nachricht erhalten.
Worauf es ankommt, ist die Skalierung Ihrer Kunden. Wenn Sie NodeJS und RabbitMQ betrachten, müssen Sie den Nachrichtendurchsatz überwachen, um zu bestimmen, wann neue Instanzen Ihrer Anwendung erstellt werden sollen. Wenn Sie eine ständig wachsende Warteschlange haben und diese nie abläuft (alle Nachrichten werden verarbeitet), müssen Sie eine neue Instanz Ihrer Kunden erstellen.
Ein paar zusätzliche Hinweise:
Ich empfehle mit https://github.com/arobson/rabbot für Ihre NodeJS/RabbitMQ Bedürfnisse. Ich habe mit vielen der "einfachen" NodeJS-Bibliotheken für RabbitMQ gearbeitet und alle haben Einschränkungen, die ich für inakzeptabel halte. Rabbot hat eine bessere Abstraktionsschicht, um das Arbeiten mit RabbitMQ zu vereinfachen und Ihnen gleichzeitig die Flexibilität zu geben, die Sie benötigen.
Sie können auch meinen RabbitMQ und NodeJS Kurs hier anschauen: https://sub.watchmecode.net/guides/microservices-with-rabbitmq/ - Screencasts, Ebooks und Interviews mit Branchenexperten, um Sie schnell mit RabbitMQ und NodeJS vertraut zu machen. Beachten Sie jedoch: Die Geröllbesetzungen verwenden Wascally als Hauptbibliothek - das ist der Vorgänger von Rabbot (es wurde in Rabbot umbenannt, als sie einige Änderungen an den Interna vorgenommen haben).
Die Richtlinien, über die ich spreche, werden in diesem Beitrag erwähnt: http://StackOverflow.com/Questions/10407760/is-there-a-performance-difference-between-pooling-connections-or-channel-in- rab – Towerman