重试流程
重试流程
1. BEGIN
2. 业务 SQL(读取版本/条件更新)
3. COMMIT
// 失败处理
catch (1213 死锁 / 1205 锁超时 / 40001 序列化失败):
ROLLBACK
sleep(随机 10~200ms)
重试(最多 N 次)
// 关键:重试块内不包含不可回滚的外部副作用(发消息、扣外部额度)| 可重试错误 | MySQL 1213/1205;PostgreSQL 40001/40P01/55P03 |
|---|---|
| 幂等保证 | 用唯一键/去重表/幂等键,使重试不产生重复副作用 |
| 退避 | 指数退避 + 抖动,避免重试风暴 |