【问题标题】:RabbitMQ competing consumers processing 1 message at a time sequentiallyRabbitMQ 竞争消费者一次按顺序处理 1 条消息
【发布时间】:2018-11-20 08:55:50
【问题描述】:

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

我尝试将预取计数设置为 1,但我相信这仅适用于单台机器。 RabbitMQ 默认情况下可以这样做还是我们需要实现自己的锁?

【问题讨论】:

    标签: rabbitmq messaging fifo


    【解决方案1】:

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

    编辑 见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 连接丢失)时,独占队列将被删除。因此,它们仅适用于特定于客户端的瞬态。

    【讨论】:

    • 感谢您的回答。我查看了独占队列,但没有看到关于它们被删除的警告。我不确定一致的哈希插件是否会有所帮助 - 我认为它不能确保串行执行,这是我主要关心的问题。关于他们目前正在开发该功能的提示看起来很有趣
    猜你喜欢
    • 2017-03-29
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多