【问题标题】:Should I close the channel/connection after every publish?每次发布后我应该关闭通道/连接吗?
【发布时间】:2017-11-05 14:03:15
【问题描述】:

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

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

感谢您的澄清

【问题讨论】:

    标签: rabbitmq node-amqp


    【解决方案1】:

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

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

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

    rabbitmq documentation 解释了连接和通道的性质(文档结束)。 this 问题的公认答案包含有关该主题的良好信息。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-31
    • 2018-07-02
    • 2020-08-19
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多