类似于this question,我们有FIFO队列,必须按顺序处理消息。我们出于冗余和性能的原因,希望来自不同计算机的竞争使用者,但是在一台计算机上只有一个使用者可以一次处理给定队列的消息。
我尝试将预取计数设置为1,但是我相信这仅在与一台机器一起使用时才有效。默认情况下,RabbitMQ是否可以实现此功能,还是我们需要实现自己的锁?
答案 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连接丢失),它们将被删除。因此,它们仅适用于特定于客户端的瞬态。