同一事件被推送多次,本地产生了多条重复记录。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
INSERT INTO events (event_id, payload) VALUES (?, ?) ON DUPLICATE KEY UPDATE payload = VALUES(payload);
推送方为保证送达会重试,接收方没有按事件标识去重。这一点先确认清楚,后面就不用反复试。
「webhook 幂等」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,使用推送方事件 ID 做唯一键;处理成功即返回确认;失败进入重试队列。
改完照着核一遍,重复推送不产生重复记录,事件处理可追踪。