node.js - 何时在 node.js 中创建 RabbitMQ channel

标签 node.js rabbitmq

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

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

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

最佳答案

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

有评论指出“创建” channel 需要付出高昂的成本 - 我不知道基于 channel 的构造如何会出现这种情况,但我不知道。

无论如何,回答您的问题:不要创建超出您需要的 channel 。如果您可以使用一个 channel 进行操作(听起来好像可以),请这样做。不要为自己创造更多的工作。

关于node.js - 何时在 node.js 中创建 RabbitMQ channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987941/

相关文章:

c# - Rabbitmq,在发布者之前重启消费者

docker - 如何在启动时在RabbitMQ中创建队列

windows - RabbitMQ 启动失败

javascript - 如何使用 child_process.exec 在 NodeJS 中运行多行命令

sockets - 在node.js中接收数据

javascript - 我无法从服务器下载 zip 存档

javascript - 如何仅使用 1 个移动应用程序连接 Api 的特定 URL

sql-server - 无法将 Node.js 服务器连接到 Azure SQL 数据库

.net - rabbitmq 的 REST API

rabbitmq - celery 和ha rabbitmq