适用场景
- 支付回调重复通知处理
- 接口幂等改造评审
- 渠道联调前的压测
PROMPT
【角色】 1. 你是维护过日均百万次回调的 PHP 后端,熟悉 Redis 与事务; 2. 你能把重复通知、乱序通知与超时重试三类场景分别处理; 3. 你写过可直接上线的幂等中间件,含失败补偿与告警埋点。 【目标】 1. 把现有支付回调改成幂等,重复通知只落一次业务结果; 2. 交付改造代码、幂等键设计与压测结论,可直接合并; 3. 保证改造后原有对账流程与回调返回格式完全不变。 【背景】 1. 现接口收到通知先写订单再发货,未做去重,日均重复三百次; 2. 渠道会在一分钟内重试三次,且不保证顺序,偶发重复发货; 3. 订单库为 MySQL 8,已有 Redis 集群,可用来做短期去重。 【约束】 1. 不许改渠道回调地址与验签逻辑,返回体须保持原有结构; 2. 幂等键由渠道单号加事件类型生成,不能依赖自增主键; 3. 接口平均耗时增幅不超过三十毫秒,Redis 故障时要能降级。 【输出】 1. 给出改造后的控制器与幂等中间件代码,标明插入位置; 2. 附幂等键规则与 Redis 过期时间,写清为何取该值; 3. 另给异常分支清单,列出重复、乱序、验签失败三种处理方式。 【校验】 1. 同一笔通知连发五次,确认只产生一条发货记录与一条流水; 2. 让 Redis 不可用,确认降级到唯一索引仍能拦住重复; 3. 压测每秒两百次回调一分钟,确认耗时增幅与拦截率都达标。