【问题标题】:Is it OK to hold back ack for a long time in RabbitMQ?在 RabbitMQ 中长按 ack 可以吗?
【发布时间】:2021-07-23 09:17:21
【问题描述】:

消费者(在手动确认模式下)可以长时间保留确认消息吗?

用例是一个进程(消费者)处理来自队列的消息(ack设置为手动),处理需要很长时间(几分钟到几小时),处理完成后发送一个ack返回。

RabbitMQ 服务器/客户端是否旨在处理这种使用模式?

【问题讨论】:

  • 轶事,不一定是个好主意,但我看到一个 ack 被用作分布式锁模式,竞争的消费者将竞争获取单个(或有限数量)的 ack队列中的消息。这个想法是,如果消费者进程崩溃,则消息 ack 将被释放以供下一个消费者获取。消费者通常会持有 ack 一天或更长时间,而 Rabbit 似乎没有问题。

标签: rabbitmq


【解决方案1】:

这种设计可以做,但不强烈推荐。从 RabbitMQ 3.8.15 开始,有一个新功能可以在消息未确认的时间超过配置时关闭连接。因此,您需要确保配置设置的持续时间大于您的客户将体验到的持续时间。见consumer_timeout documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多