类似 this question ,我们有FIFO队列,必须按顺序处理消息。出于冗余和性能方面的原因,我们希望来自不同机器的竞争性使用者,但一台机器上只有一个使用者一次应处理给定队列的消息。
我尝试将预取计数设置为1,但我相信只有在与一台机器一起使用时,这才有效。对于rabbitmq,这在默认情况下是可能的,还是需要实现自己的锁?
如果一个队列中有多个消费者,那么就没有办法阻止其中一个消费者,所有人都以循环方式接收消息。
rabbitmq正在处理这个问题 feature : 引入只激活一个并发使用者的选项
你可以看到这个插件, https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange 使用不同的队列分配负载。
我尝试将预取计数设为1
prefetch=1 意味着消费者一次只接受一条信息。
prefetch=1
我们需要实现我们自己的锁吗
是的,如果你想的话 一个 避免其他消费者排队的消费者。
编辑
还有 Exclusive Queues https://www.rabbitmq.com/queues.html#exclusive-queues 但是 笔记 :
Exclusive Queues
独占队列在其声明连接关闭或消失时(例如,由于底层TCP连接丢失)将被删除。因此,它们仅适用于客户特定的瞬态状态。