如何将RabbitMQ扩展到某些消费者

时间:2018-10-02 04:49:24

标签: rabbitmq

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

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

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

在上面的示例中:

  • cA始终处理邮件,无论如何。
  • 如果cB'尚未处理邮件,则
  • cB"处理邮件。
  • 如果cB"还没有处理邮件,cB'处理邮件。

这个想法是要尽可能快地处理数据,并且(如上图所示),如果cB'cB"需要联系数据库或API,我希望另一个消费者来接管尽可能快地将数据移出队列。 但是我也不想多次收集这些数据。

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

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

在RabbitMQ中可以实现吗?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

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

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

如果您以以下方式预订队列:

  • cA是queue1的唯一订户
  • cB'和cB”共享队列2

路由和订阅概述:

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

该消息将: