我应该在每次发布后关闭 channel/connection 吗?
Should I close the channel/connection after every publish?
我在 Node.js 中使用 amqplib,我不清楚我的代码中的最佳实践。
基本上,我当前的代码会在节点服务器启动时调用 amqp.connect()
,然后为每个生产者和每个消费者使用不同的通道,而不会真正关闭它们中的任何一个。我想知道这是否有意义,或者我是否应该在每次要发布消息时创建频道、发布和关闭它。那连接呢?那是 "good practice" 连接一次,然后在我的服务器的整个生命周期内保持打开状态吗?
在消费者方面——我可以使用单个连接和单个通道来监听多个队列吗?
感谢您的任何澄清
一般来说,打开和关闭每条消息的连接和频道不是一个好习惯。连接是长期存在的,并且需要资源来保持打开和关闭它们。对于通道,它们与连接共享 TCP 连接,因此它们更轻量级,但它们仍然会消耗内存,绝对不应该在使用完它们后保持打开状态。
建议每个线程一个通道,每个消费者一个通道。但是为了发布,使用相同的渠道是完全可以的。但请记住,根据操作的不同,协议可能会在某些情况下终止通道(例如队列存在性检查),因此请为此做好准备。许多客户端实现中的最大通道数也有软(可配置)和硬(通常为 65535)限制。
所以总结一下,根据您的用例使用一到几个连接,在需要时打开通道并在有意义时共享它们,但记得在完成后关闭它们。
rabbitmq documentation explains the nature of the connections and channels (end of the document). And the accepted answer on this 问题有很好的关于这个主题的信息。
我在 Node.js 中使用 amqplib,我不清楚我的代码中的最佳实践。
基本上,我当前的代码会在节点服务器启动时调用 amqp.connect()
,然后为每个生产者和每个消费者使用不同的通道,而不会真正关闭它们中的任何一个。我想知道这是否有意义,或者我是否应该在每次要发布消息时创建频道、发布和关闭它。那连接呢?那是 "good practice" 连接一次,然后在我的服务器的整个生命周期内保持打开状态吗?
在消费者方面——我可以使用单个连接和单个通道来监听多个队列吗?
感谢您的任何澄清
一般来说,打开和关闭每条消息的连接和频道不是一个好习惯。连接是长期存在的,并且需要资源来保持打开和关闭它们。对于通道,它们与连接共享 TCP 连接,因此它们更轻量级,但它们仍然会消耗内存,绝对不应该在使用完它们后保持打开状态。
建议每个线程一个通道,每个消费者一个通道。但是为了发布,使用相同的渠道是完全可以的。但请记住,根据操作的不同,协议可能会在某些情况下终止通道(例如队列存在性检查),因此请为此做好准备。许多客户端实现中的最大通道数也有软(可配置)和硬(通常为 65535)限制。
所以总结一下,根据您的用例使用一到几个连接,在需要时打开通道并在有意义时共享它们,但记得在完成后关闭它们。
rabbitmq documentation explains the nature of the connections and channels (end of the document). And the accepted answer on this 问题有很好的关于这个主题的信息。