Py学习  »  MQ

rabbitmq竞争的消费者一次按顺序处理1条消息

NickL • 4 年前 • 1391 次点击  

类似 this question ,我们有FIFO队列,必须按顺序处理消息。出于冗余和性能方面的原因,我们希望来自不同机器的竞争性使用者,但一台机器上只有一个使用者一次应处理给定队列的消息。

我尝试将预取计数设置为1,但我相信只有在与一台机器一起使用时,这才有效。对于rabbitmq,这在默认情况下是可能的,还是需要实现自己的锁?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37849
 
1391 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Gabriele
Reply   •   1 楼
Gabriele    5 年前

如果一个队列中有多个消费者,那么就没有办法阻止其中一个消费者,所有人都以循环方式接收消息。

rabbitmq正在处理这个问题 feature : 引入只激活一个并发使用者的选项

你可以看到这个插件, https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange 使用不同的队列分配负载。

我尝试将预取计数设为1

prefetch=1 意味着消费者一次只接受一条信息。

我们需要实现我们自己的锁吗

是的,如果你想的话 一个 避免其他消费者排队的消费者。

编辑

还有 Exclusive Queues https://www.rabbitmq.com/queues.html#exclusive-queues 但是 笔记 :

独占队列在其声明连接关闭或消失时(例如,由于底层TCP连接丢失)将被删除。因此,它们仅适用于客户特定的瞬态状态。