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 Queues
https://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.
类似于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 Queues
https://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.