与这个问题类似,我们有 FIFO 队列,必须按顺序处理消息。出于冗余和性能原因,我们希望来自不同机器的竞争消费者,但一次只有一台机器上的一个消费者应该处理给定队列的消息。
我尝试将预取计数设置为 1,但我相信这仅适用于单台机器。默认情况下,RabbitMQ 是否可以做到这一点,还是我们需要实现自己的锁?
给定具有多个消费者的单个队列,无法阻止其中一个消费者,所有消费者都以循环方式接收消息。
编辑见https://www.rabbitmq.com/consumers.html#single-active-consumer /EDIT
你可以看到这个插件https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange使用不同的队列来分配负载。
我尝试将预取计数设置为 1
prefetch=1
意味着消费者一次接受一条消息。
我们需要实现我们自己的锁吗
是的,如果你想要一个单一的消费者排队避免其他消费者。
编辑
还有Exclusive Queues
https://www.rabbitmq.com/queues.html#exclusive-queues但请注意:
独占队列在声明连接关闭或消失时被删除(例如,由于底层 TCP 连接丢失)。因此,它们仅适用于客户端特定的瞬态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句