我有一个拥有大量队列的RabbitMQ设置。由于每个队列中数据的性质,它必须按严格的顺序处理,因此我们只允许每个队列上的单个使用者。这不是一个问题,但我们确实冒着在队列上意外启动第二个消费者的风险,这将是一件坏事。有很多队列和大量的应用程序服务器,我们只需要一个小错误就可以结束这种情况。
在我花时间将软件更改为有效"锁定"一个队列(将该锁存放在DB或其他东西中),RabbitMQ中有什么可以限制队列可以拥有的消费者数量吗?如果是这样,我可以将我的队列限制在一个消费者身上,而且我的多个消费者的风险也会消失。
干杯!
答案 0 :(得分:4)
答案 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
单一活跃消费者
<块引用>单个活跃消费者允许一次只有一个消费者 从队列中消费并故障转移到另一个注册的消费者 万一活动的被取消或死亡。