后端岗位面试题更新 2026-08-05

在 RabbitMQ 的使用中,如果消费者收到消息后没有进行确认,系统会采取怎样的处理流程?

后端开发技术原理问题排查RabbitMQ

考察说明

考查对 RabbitMQ 消息确认机制和未确认消息处理逻辑的理解。

回答思路

  1. 【回答框架 1】RabbitMQ 使用消息确认机制确保消息不丢失。当消费者收到消息后,若未发送 ack,该消息会保持在队列中,并标记为未确认状态。
  2. 【回答框架 2】未确认的消息会停留在队列头部,不会被其他消费者再次消费。只有当消费者发送 ack、nack(并设置 requeue 或丢弃)或通道关闭时,消息状态才会改变。
  3. 【回答框架 3】如果消费者连接断开或异常,未确认的消息会被重新放入队列,等待其他消费者消费,确保消息至少投递一次。
  4. 【回答框架 4】可以通过监听 channel 的 confirm 模式或使用消费者标签跟踪消息状态。对于长时间处理的消息,可以设置 prefetch 限制未确认消息数量,避免堆积。
  5. 【回答框架 5】实际场景中,未确认消息可能因消费者故障导致重复投递,因此需要结合业务幂等性设计,如使用唯一标识去重。
  6. 【关键点 1】未确认消息会保留在队列中,不会丢失。
  7. 【关键点 2】消费者断开后,未确认消息会被重新入队。
  8. 【关键点 3】prefetch 可以控制未确认消息的最大数量。
  9. 【关键点 4】消息至少投递一次,可能导致重复消费,需幂等处理。