20

我在 Node.js 中使用 amqplib,我不清楚我的代码中的最佳实践。

基本上,我当前的代码amqp.connect()在节点服务器启动时调用,然后为每个生产者和每个消费者使用不同的通道,从不真正关闭它们中的任何一个。我想知道这是否有意义,或者我应该在每次我想发布消息时创建频道、发布并关闭它。那么连接呢?连接一次,然后在我的服务器的整个生命周期内保持打开状态是一种“好习惯”吗?
在消费者方面 - 我可以使用单个连接和单个通道来侦听多个队列吗?

感谢您的任何澄清

4

1 回答 1

32

通常,打开和关闭每条消息的连接和通道不是一个好习惯。连接是长期存在的,需要资源来不断打开和关闭它们。对于通道,它们与连接共享 TCP 连接,因此它们更轻量级,但它们仍然会消耗内存,并且在使用完之后绝对不应该保持打开状态。

建议每个线程有一个通道,每个消费者有一个通道。但是对于发布来说,使用同一个频道是完全可以的。但请记住,根据操作,协议可能会在某些情况下终止通道(例如队列存在检查),因此请为此做好准备。许多客户端实现上的最大通道数也有软(可配置)和硬(通常为 65535)限制。

总而言之,根据您的用例使用一对多连接,在需要时打开通道并在有意义时共享它们,但请记住在完成后关闭它们。

rabbitmq文档解释了连接和通道的性质(文档结尾)。关于这个问题的公认答案有关于这个主题的很好的信息。

于 2017-06-05T06:34:43.983 回答