消费端幂等:至少一次 + 去重 = 恰好一次
2026/8/22大约 2 分钟
分布式事务系列 · 阶段 4 · 消息一致性 · 第 34/49 篇 · 🚧 占位待学
上一篇:《RocketMQ 事务消息:half、回查与全时序》
下一篇:《最大努力通知:衰减重试与查证兜底》
学习大纲:《分布式事务学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 4A · 单元 4A.4
一、本文要解决的问题
至少一次投递下,重复消息怎么挡?去重表、状态机、业务唯一键三种幂等方案各防哪一层?
二、知识点清单
- 重复的来源:ACK 丢失、消费超时重试、生产端重发
- 方案一:去重表(消息 key 唯一索引)
- 方案二:业务状态机(当前状态不允许的动作直接忽略)
- 方案三:业务唯一键天然幂等(如「一单一券」唯一约束)
- 去重操作与业务操作必须同事务
三、动手实验(学习时必须真跑)
- 消费端用去重表实现幂等
- 人为重复投递同一消息,验证只生效一次
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Apache Seata 2.6.0 / MySQL 8.0 / RocketMQ 5.x / Spring Boot 3.x)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。