文章详情

后端接口幂等与重试:把重复请求变成可控行为

支付、下单、回调场景里,重复请求很常见。本文讨论幂等键设计、重试策略与一致性边界。

枳树
枳树

发布于 2026-04-11

在真实业务里,重复请求是常态,不是异常。

网络抖动、客户端重试、消息重复投递都会让同一个动作被触发多次。

如果后端没有幂等设计,就会出现重复下单、重复扣款、重复发券等严重问题。

幂等的核心目标

同一业务动作被执行多次,系统结果保持一致。

要实现这个目标,关键是定义“同一动作”的唯一标识,也就是幂等键。

幂等键怎么设计

常见做法:

  • 客户端生成请求唯一 ID
  • 服务端按“用户 + 业务对象 + 时间窗”生成键
  • 网关层透传或统一注入幂等键

幂等键要进入持久化存储,不能只放内存,否则实例重启就失效。

幂等与重试要成对设计

只做重试不做幂等,会把小故障放大成业务事故。

一套更稳的组合是:

  1. 客户端指数退避重试
  2. 服务端幂等检查
  3. 明确不可重试错误码

这样才能既提升成功率,又不破坏数据一致性。

实战建议

  • 支付与库存场景优先做强幂等
  • 读接口重试要设置总超时预算
  • 对异步回调场景做去重日志和补偿任务

幂等设计的价值往往在“异常时刻”才会被真正看见。