使用NodeJS的AMQP的信道池策略

时间:2015-08-18 18:50:35

标签: node.js rabbitmq amqp node-amqp

要从NodeJS发布者发布消息到RabbitMQ(已确认,持久)(我使用bramqp,但问题是通用的),应该是什么渠道池策略?

如果我创建一个巨大的池(20,000 +)并在每次需要发布时寻找一个免费频道,然后每当我得到确认(保留在空闲池中)时释放频道,然后在高负载下,确认延迟,因此会产生大量通道,导致RabbitMQ中的erlang进程快速增加,从而降低其性能。

如果我使用非常小的池或没有池进行管理,那么只要速率很高,就会抛出套接字错误,此时唯一的选择是重置整个连接。

这里的最佳做法是什么?

1 个答案:

答案 0 :(得分:-1)

我不能说我理解你在做什么,但重要的是要理解通道是协议级构造。没有“通道池”这一点 - 当您开始与AMQP服务器交互时,它使用现有连接(如果可用)并通过在握手过程中为通道头分配整数值来创建新的“通道” 。也许你的程序实际上创建了很多连接?

我建议每次发布时都要执行以下操作:

  1. 打开频道
  2. 发布消息
  3. 等待确认
  4. 关闭频道