何时在 node.js 中创建 RabbitMQ 通道

When to create RabbitMQ channels in node.js

我读过的关于为 RabbitMQ 创建通道的常见建议建议每个线程使用一个通道。但是在 node.js 中,我们根本不管理线程。 那么我们什么时候创建频道

我的用例是使用 AMQPLib 的节点 Web 服务器,它需要使用 request/response 模式与单个 RabbitMQ 服务器通信。每个 HTTP 请求可能需要多个 RabbitMQ 请求才能生成 HTTP 响应。我计划为每个节点进程使用一个 Rabbit 连接,但至于为各种请求或响应队列重用多少通道,我不确定。

一个附加问题:如果答案是为每个单独的请求使用一个通道,那么在发送每条消息之前必须创建一个通道是否会有很大的延迟损失?

通道是一种 AMQP 协议级结构。它们实际上与底层连接无关(除了一个明显的事实,即需要一个连接才能拥有一个通道)。 RabbitMQ 客户端的 .NET 实现写得非常糟糕,以至于它在通道上线程锁定,因此每个线程一个通道 - 这是代码限制,而不是协议限制。

有一条评论说有 "heavy cost to creating" 个频道 - 根据频道的构造,我不明白这怎么可能是真的,但我不知道。

无论如何,回答您的问题:不要创建超过您需要的频道。如果您可以使用一个频道进行操作(听起来您可以),那就去做吧。不要为自己创造更多的工作。