【发布时间】:2018-11-20 08:55:50
【问题描述】:
类似于this question,我们有先进先出队列,消息必须按顺序处理。出于冗余和性能原因,我们希望来自不同机器的竞争消费者,但一台机器上的一个消费者应该一次处理给定队列的消息。
我尝试将预取计数设置为 1,但我相信这仅适用于单台机器。 RabbitMQ 默认情况下可以这样做还是我们需要实现自己的锁?
【问题讨论】:
类似于this question,我们有先进先出队列,消息必须按顺序处理。出于冗余和性能原因,我们希望来自不同机器的竞争消费者,但一台机器上的一个消费者应该一次处理给定队列的消息。
我尝试将预取计数设置为 1,但我相信这仅适用于单台机器。 RabbitMQ 默认情况下可以这样做还是我们需要实现自己的锁?
【问题讨论】:
鉴于具有多个消费者的单个队列,无法阻止其中一个消费者,所有消费者都以循环方式接收消息。
编辑 见https://www.rabbitmq.com/consumers.html#single-active-consumer /编辑
你可以看到这个插件,https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange 使用不同的队列分配负载。
我尝试将预取计数设置为 1
prefetch=1 表示消费者一次接收一条消息。
我们是否需要实现自己的锁
是的,如果您希望一个消费者排队避开其他消费者。
编辑
也有Exclusive Queueshttps://www.rabbitmq.com/queues.html#exclusive-queues但是注意:
当声明的连接关闭或消失(例如,由于底层 TCP 连接丢失)时,独占队列将被删除。因此,它们仅适用于特定于客户端的瞬态。
【讨论】: