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

诺姆·加尔(Noam Gal)

我在Node.js中使用amqplib,但我不清楚代码中的最佳做法。

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

谢谢您的澄清

御子

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

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

综上所述,根据您的用例,使用一对多的连接,在需要时打开通道,并在合理的时候共享它们,但切记在完成后关闭它们。

rabbitmq文档说明了连接和通道的性质(文档末尾)。这个问题上公认的答案对这个问题有很好的信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

每个执行批处理后都应该提交吗?

每次基于Selenium的自动化测试后,我都应该退出浏览器吗?

每次访问 Weakref 对象时都应该调用它吗?

Angular:每次需要更新时,我都应该订阅()到http.get()吗?

每次制作新补丁时,都应该更改PatchCreation Element的GUID吗?

每次重新启动应用程序时,我都应该调用setMinimumBackgroundFetchInterval吗?

所有课程都应该可以测试吗?

所有工厂方法都应该公开吗?

每个功能都应该闭包吗?

每次用户点击每行的添加行时,都应该从01号开始

每个微服务都应该管理自己的用户权限和用户角色吗?

每个不使用self参数的方法都应该是静态类吗?

每个片段都应该有自己的活动吗?

每个优秀的Java / Java EE开发人员都应该回答的问题吗?

使用异步/等待进行设计-一切都应该异步吗?

所有输入都应该在Rust中是可变的吗?

每个REST端点在Java EE中都应该是异步的吗?

页面上的每个“组件”都应该是angularJS中的指令吗?

VueJS和NPM-所有依赖项都应该是devDependencies吗?

每个HTML页面都应该有一个主标记吗?

每个表都应该有一个主键吗?

每个优秀的.NET开发人员都应该回答的问题吗?

在iOS中,每个UIView都应该有一个UIViewController吗?

每个组件(.xml)都应该有自己的 eclipse-project 吗?

使用AppCompat时,我所有的活动都应该始终扩展ActionBarActivity吗?

所有敏捷史诗都应该用句子标题吗?

每个奇特的指针都应该是一个迭代器吗?

在每个foreach语句之后,我都应该同时取消设置$ key和$ value吗?

每个 SolrCloud 节点都应该有自己的 ssl 证书吗?