错误分类与重试策略
| 错误类型 | 是否重试 | 策略 |
|---|---|---|
| 400 / 401 / 403 / 404 | 不重试 | 先修正请求或权限 |
| 408 / 409 / 429 | 重试 | 退避 + 抖动 + retry-after |
| 500 / 502 / 503 / 504 | 重试 | 指数退避,限制最大次数 |
| 连接超时 / 网络错误 | 重试 | 同上,并检查幂等性 |
指数退避 + 抖动(Python 示例)
指数退避 + 抖动(Python 示例)
import random, time
def backoff_seconds(attempt):
return min(30, 2 ** attempt) * (0.5 + random.random())
for attempt in range(6):
try:
do_request()
break
except RetryableError:
time.sleep(backoff_seconds(attempt))重试请求应携带幂等键或业务唯一 ID,避免重复扣费与重复写库(尤其网关自动重发场景)。