我应该在每次发布后关闭频道/连接吗?

时间:2017-06-04 19:40:07

标签: rabbitmq node-amqp

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

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

感谢您的任何澄清

1 个答案:

答案 0 :(得分:22)

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

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

总而言之,根据您的使用情况,使用一个到几个连接,在需要时打开频道并在有意义时分享它们,但记得在完成后关闭它们。

rabbitmq documentation解释了连接和通道的性质(文档末尾)。在this问题上接受的答案有关于该主题的良好信息。