知识卡片

消费确认机制如何保证消息不丢

专业/工作 · 591.a

内容

当autoAck设为false时,RabbitMQ会把消息标记为”已投递未确认”状态,只有收到消费者显式的Basic.Ack后才真正从存储中删除;如果持有这条未确认消息的消费者连接断开,RabbitMQ会把消息重新放回队列,等待投递给下一个消费者。RabbitMQ刻意不为未确认消息设置超时时间,因为它允许消费者花费任意长的时间处理一条消息——判断是否需要重投的唯一依据是连接是否已断开,而不是处理耗时。发散:这体现了一种设计取舍——用”连接存活”代替”处理超时”作为可靠性信号,避免了给业务处理时间强加一个人为上限。

参考来源

《RabbitMQ实战指南》第3章《客户端开发向导》