Skip to content

面试速答(先看这里)

**一句话结论:**RabbitMQ的消息消费是有确认机制的,正常情况下,消费者在消息消费成功后,会发送一个确认消息,消息队列接收到之后,就会将该消息从消息队列中删除,下次也就不会再投递了。

60秒标准回答:

RabbitMQ的消息消费是有确认机制的,正常情况下,消费者在消息消费成功后,会发送一个确认消息,消息队列接收到之后,就会将该消息从消息队列中删除,下次也就不会再投递了

但是如果存在网络延迟的问题,导致确认消息没有发送到消息队列,导致消息重投了,是有可能,所以,当我们使用MQ的时候,消费者端自己也需要做好幂等控制来防止消息被重复消费

一般来说,处理这种幂等问题就是我们提过无数次的'一锁、二判、三更新'

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**但是如果存在网络延迟的问题,导致确认消息没有发送到消息队列,导致消息重投了,是有可能,所以,当我们使用MQ的时候,消费者端自己也需要做好幂等控制来防止消息被重复消费。
  • **要点2:**一般来说,处理这种幂等问题就是我们提过无数次的'一锁、二判、三更新'
  • **要点3:**也就是说我们在发送消息是需要生成一个唯一的标识并且把它放到消息体中,根据这个标识就可以判断两次消息是不是同一条。

**记忆锚点:**RabbitMQ → 会将该消息从消息队列 → 消息队列

加分表达:

  • 但是如果存在网络延迟的问题,导致确认消息没有发送到消息队列,导致消息重投了,是有可能,所以,当我们使用MQ的时候,消费者端自己也需要做好幂等控制来防止消息被重复消费。
  • 这样我们在消费者端,接收到消息以后,只需要解析出消息体中的这个唯一标识,就可以通过'一锁、二判、三更新'的方式来判断是否消费成功过了。

追问准备:

  • 围绕「RabbitMQ」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「会将该消息从消息队列」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「消息队列」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

RabbitMQ的消息消费是有确认机制的,正常情况下,消费者在消息消费成功后,会发送一个确认消息,消息队列接收到之后,就会将该消息从消息队列中删除,下次也就不会再投递了。

但是如果存在网络延迟的问题,导致确认消息没有发送到消息队列,导致消息重投了,是有可能,所以,当我们使用MQ的时候,消费者端自己也需要做好幂等控制来防止消息被重复消费。

一般来说,处理这种幂等问题就是我们提过无数次的'一锁、二判、三更新'

📄 ✅如何解决接口幂等的问题?

打开文档:✅如何解决接口幂等的问题?

也就是说我们在发送消息是需要生成一个唯一的标识并且把它放到消息体中,根据这个标识就可以判断两次消息是不是同一条。这样我们在消费者端,接收到消息以后,只需要解析出消息体中的这个唯一标识,就可以通过'一锁、二判、三更新'的方式来判断是否消费成功过了。