【问题标题】:DirectMessageListenerContainer and SimpleMessageListenerContainer relationship to Rabbit ChannelsDirectMessageListenerContainer 和 SimpleMessageListenerContainer 与 Rabbit Channels 的关系
【发布时间】:2020-02-03 18:44:38
【问题描述】:

当使用 DirectMessageListenerContainerconsumersPerQueue 属性为 25 时,我注意到 25每个侦听器容器的订阅队列都会创建兔子频道。在我们的设置中,随着更多队列被动态添加到侦听器容器中,rabbit 通道数迅速增长。我们不得不增加经纪人渠道限制以适应渠道增长。

  1. DirectMessageListenerContainer 中的渠道和消费者之间的关系是什么。根据我的观察,每个消费者似乎有 1 个频道。
  2. DirectMessageListenerContainer 是否提供任何通道池/回收/重新平衡以控制通道增长。专门针对大部分空闲的队列。
  3. 简单的 SimpleMessageListenerContainer 是否以不同方式处理通道池,因为它可以动态调整使用者计数的大小。

【问题讨论】:

    标签: spring spring-boot spring-rabbit


    【解决方案1】:
    1. DMLC 为每个消费者使用单独的渠道。

    2. 没有。

    3. SMLC 每个concurrentConsumers 使用一个通道;从 2.0 开始,每个通道都用于多个消费者(当侦听多个队列时)。

    但是,使用 SMLC 动态添加或删除队列的效率要低得多,因为在进行更改时会取消并重新创建消费者。

    【讨论】:

    • 主要是为了隔离 - 使用共享通道,有某些类别的错误,如果一个消费者导致错误,通道将被broker关闭;影响该渠道中的所有消费者。我们可以考虑在未来的版本中为每个队列添加一个通道选项,或类似的东西。请打开一个 GitHub 问题。
    • 对于我们将动态添加/删除队列并希望有效地使用通道以避免达到 RabbitMQ 的 channels_max 限制的系统的最佳实践是什么?'
    • 我现在没有适合你的解决方案;因此我建议打开一个新功能请求。
    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2013-06-01
    相关资源
    最近更新 更多