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

RabbitMQ competing consumers processing 1 message at a time sequentially

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

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

给定具有多个消费者的单个队列,无法阻止其中一个消费者,所有消费者都以循环方式接收消息。

编辑 参见 https://www.rabbitmq.com/consumers.html#single-active-consumer /编辑

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

I tried setting the prefetch count to 1

prefetch=1表示消费者一次接收一条消息。

do we need to implement our own lock

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

编辑

还有Exclusive Queueshttps://www.rabbitmq.com/queues.html#exclusive-queues但是注意:

Exclusive queues are deleted when their declaring connection is closed or gone (e.g. due to underlying TCP connection loss). They, therefore, are only suitable for client-specific transient state.