G 技术分享
支付回调被重推三次:幂等表、状态机与退避重试怎么配合
支付回调天然会重复。本文从一次重复发货的线上故障切入,讲清楚幂等键怎么选、为什么只能靠数据库唯一索引兜底、状态机如何接住乱序回调、重试该放在哪里,以及几个真正会出事的地方。附可运行的 Spring Boot + MySQL 代码。
2026-10-24
#支付回调#幂等设计
7
Blog
格达软件工程师的实战经验、技术选型与行业观察
支付回调天然会重复。本文从一次重复发货的线上故障切入,讲清楚幂等键怎么选、为什么只能靠数据库唯一索引兜底、状态机如何接住乱序回调、重试该放在哪里,以及几个真正会出事的地方。附可运行的 Spring Boot + MySQL 代码。
两个事务在 RR 隔离级别下先查后插,计数没超却多发了券;更怪的是 UPDATE 影响行数为 1,同一事务里 SELECT 却查不到这行。这篇文章用可复现的 SQL 会话讲清快照读与当前读的差异、间隙锁的边界,以及唯一索引和原子更新怎么兜底。
面向跑了几年的 Java 老项目:在不改调用方的前提下,用接缝把 new、静态配置和系统时钟扒出来,配上可复制的 Mockito + JUnit5 示例、JaCoCo 增量覆盖率门禁,以及静态初始化、误连生产配置、H2 方言这三类实测踩过的坑。
在数字化转型浪潮中,越来越多的企业发现:通用型SaaS(如标准化ERP、CRM、OA)虽然上手快、成本低,但往往无法贴合自身业务逻辑。不同行业、不同规模的企业,在流程审批、数据权限、报表口径、生产排程等方面存在巨大差异。强行套用通用软件,轻则效率打折,重则业务与系统“两张皮”,最终沦为摆设。