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

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

问题描述:

我在Node.js中使用amqplib,我不清楚我的代码中的最佳实践。每次发布后我应该关闭频道/连接吗?

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

谢谢你的任何澄清

一般来说,这不是一个很好的做法,打开和关闭连接,每个消息通道。连接长期存在,需要资源来持续打开和关闭它们。对于频道,它们与连接共享TCP连接,因此它们更轻量,但它们仍会占用内存,并且在完成使用后肯定不应该保持打开状态。

建议每个线程有一个频道,每个用户有一个频道。但对于发布,使用相同频道完全可以。但要记住的是,取决于操作,协议可能杀死在某些情况下(例如,队列存在检查)的信道,所以该准备。还有软(可配置)和硬(通常65535)上的许多客户端的实现对信道的最大数量的限制。

所以总结起来,这取决于你的使用情况用一到几个连接,完成时,当你需要他们,当它是有道理的共享,但是要记住开启的通道将其关闭。

的RabbitMQ的documentation解释了连接和信道(文件结束)的性质。而就this问题接受的答案有关于这个问题的好信息。