有没有办法限制RabbitMQ队列中的消费者数量?

时间:2017-12-29 10:02:33

标签: rabbitmq

我有一个拥有大量队列的RabbitMQ设置。由于每个队列中数据的性质,它必须按严格的顺序处理,因此我们只允许每个队列上的单个使用者。这不是一个问题,但我们确实冒着在队列上意外启动第二个消费者的风险,这将是一件坏事。有很多队列和大量的应用程序服务器,我们只需要一个小错误就可以结束这种情况。

在我花时间将软件更改为有效"锁定"一个队列(将该锁存放在DB或其他东西中),RabbitMQ中有什么可以限制队列可以拥有的消费者数量吗?如果是这样,我可以将我的队列限制在一个消费者身上,而且我的多个消费者的风险也会消失。

干杯!

3 个答案:

答案 0 :(得分:4)

exclusive方法中的consume标记用于此目的。

答案 1 :(得分:0)

如果您使用的是sprig framework,则可以在标签兔子监听器exclusive=true中使用标签@RabbitListener。这样一来,您就可以将队列限制为一个使用者。

@RabbitListener(queues = "${queue.name}", exclusive = true)

答案 2 :(得分:0)

我迟到了,但对于可能遇到这种情况的人 - 如果您只需要一个活跃的消费者,您可以使用新功能(自 3.8 起)- https://www.rabbitmq.com/consumers.html#single-active-consumer

单一活跃消费者

<块引用>

单个活跃消费者允许一次只有一个消费者 从队列中消费并故障转移到另一个注册的消费者 万一活动的被取消或死亡。