【问题标题】:How can I scale RabbitMQ to some consumers如何将 RabbitMQ 扩展到某些消费者
【发布时间】:2019-03-07 05:13:33
【问题描述】:

我正在使用 RabbitMQ 向 2 个或更多消费者发送消息。 看着the simple tutorial我可以很容易地做到这一点。

但我也想扩展我的一些消费者,并允许 一些 消费者始终处理消息,而 一些 消费者只在消息未处理时才处理该消息已经被另一个“类似”消费者。

    |-------> cA
    |
P --|-------> cB'
    |   
    |-------> cB"

在我上面的例子中:

  • cA始终处理消息,无论如何。
  • 如果cB" 尚未处理邮件,cB'处理邮件。
  • 如果cB' 尚未处理消息,cB"处理该消息。

我们的想法是尽可能快地处理数据,并且(看上图)如果cB'cB" 需要联系数据库或 API,我希望另一个消费者从尽可能快地排队。 但我也不希望这些数据被多次提取。

我总是可以添加另一个发布者并将消息从队列中删除,但我不确定这是否真的是实现我所追求的最有效的方法。

    |-------> cA
    |
P --|-------> p'--|-------> cB'
                  |
                  |-------> cB"

这在 RabbitMQ 中可以实现吗?

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,那么带有 2 个队列的设置将解决您的问题。

      两个队列都必须使用相同的路由键绑定到 exchange(X)。

      如果您按以下模式订阅队列:

      • cA 作为 queue1 的唯一订阅者
      • cB' 和 cB" 共享队列2

      路由和订阅概述:

               |--<routing key>---queue1-----cA
       P---X---|                          
               |                          |--cB'
               |--<routing key>---queue2--|
                                          |--cB"
      

      消息将:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-28
        • 2016-07-12
        • 1970-01-01
        • 2011-04-15
        • 2018-05-20
        • 2013-10-10
        • 1970-01-01
        • 2020-05-26
        相关资源
        最近更新 更多