RabbitMQ竞争用户依次一次处理1条消息

时间:2018-11-20 08:55:51

标签: rabbitmq messaging fifo

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

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

1 个答案:

答案 0 :(得分:1)

鉴于有多个使用方的单个队列,无法阻止其中一个使用方,所有接收方都以循环方式接收消息。

RabbitMQ正在为此feature工作:引入一个选项,使一个并发的消费者仅处于活动状态

您可能会看到此插件https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange使用不同的队列分配负载。

  

我尝试将预取计数设置为1

prefetch=1意味着消费者一次接收一条消息。

  

我们需要实现自己的锁吗

是的,如果您要让一个消费者来排挤其他消费者。

编辑

还有Exclusive Queues https://www.rabbitmq.com/queues.html#exclusive-queues,但注意

  

排他队列的声明连接已关闭或消失时(例如,由于基础TCP连接丢失),它们将被删除。因此,它们仅适用于特定于客户端的瞬态。

相关问题