异步请求重试应该怎样设计?
处理退避、最大次数、可重试错误、取消和幂等,避免无条件重试放大故障。
参考答案
重试策略要先区分可重试错误和永久错误:网络暂时失败、超时或部分 5xx 可能重试,参数错误、权限失败和用户取消通常不应重试。请求还必须具备幂等语义,否则重复提交可能造成重复订单或重复写入。
次数、总时长和退避上限要明确,常用指数退避加随机抖动,避免大量客户端同时重试形成惊群。服务端也应提供 Retry-After 或业务错误码,客户端不能只看一个状态码。
AbortSignal 应能取消等待和底层请求,重试之间的延迟也要可取消。最终失败要保留可诊断原因,并向用户说明当前操作是否已经在服务端生效。