1

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

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

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

这里的最佳做法是什么?

4

1 回答 1

-2

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

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

  1. 打开一个频道
  2. 发布消息
  3. 等待确认
  4. 关闭频道
于 2015-08-19T10:59:27.500 回答