上一题下一题

MQ 消息去重机制与业务幂等机制分别解决哪类重复问题,为什么去重表不能替代业务幂等?

进阶版
来源:jd高级工程师MQ消息去重机制HTTP幂等性服务端重复执行重复消费与消息丢失
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

MQ 消息去重主要解决的是 同一条消息被重复投递或重复消费 的问题,属于消息层面的重复。比如消费者消费成功后还没来得及提交 ACK 就宕机,MQ 会认为消息没有成功消费并重新投递;或者生产端重试导致同一消息被发送多次。通常可以通过消息唯一 ID、消费记录表、Redis、消费状态等方式判断这条消息是否已经处理过。

业务幂等解决的是 同一个业务操作被执行多次,业务结果仍然只能生效一次 的问题。它关注的不是消息是否相同,而是业务语义是否重复。比如订单支付回调可能重复到达,或者用户重复点击提交,即使请求 ID 不同,只要针对的是同一笔订单,就不能重复扣款或重复发货。常见做法包括业务唯一索引、状态机校验、幂等号、条件更新,以及扣款时的业务流水约束。

去重表不能替代业务幂等,主要有几个原因:

1. 去重粒度不同 。去重表一般按照消息 ID 判断重复,只能识别“同一条消息”是否处理过。但同一个业务操作可能因为重试、补偿、不同系统转发产生不同的消息 ID,这些消息在消息层面不重复,在业务层面却可能是同一个操作。

2. 无法覆盖所有业务入口 。业务操作可能来自 MQ、HTTP

登录后查看完整内容