本页内容
投递与重试
按约 16 小时内 11 次投递尝试设计,对重复事件去重,检查失败并在恢复后重放。
如果你的端点返回非 2xx 状态或超过 10 秒超时,Paymos 按指数退避(x2)重试。最多 11 次尝试(1 次首发 + 10 次重试),横跨约 16 小时。
退避时间表
| 尝试 | 距上次延迟 | 累计延迟 |
|---|---|---|
| 1 | 立即 | 0 |
| 2 | 1 分钟 | 1 分钟 |
| 3 | 2 分钟 | 3 分钟 |
| 4 | 4 分钟 | 7 分钟 |
| 5 | 8 分钟 | 15 分钟 |
| 6 | 16 分钟 | 31 分钟 |
| 7 | 32 分钟 | 约 1 小时 |
| 8 | 1 小时 | 约 2 小时 |
| 9 | 2 小时 | 约 4 小时 |
| 10 | 4 小时 | 约 8 小时 |
| 11 | 8 小时 | 约 16 小时 |
11 次尝试全部结束后,事件标记为失败。失败事件可从控制台重放——重放会重置尝试计数并重新入队投递。
幂等
投递为 at-least-once。重试期间出现重复投递是正常的——你的处理器必须幂等。每次投递都在 X-Webhook-Id 请求头(以及 body 的 event_id)中携带同一个稳定 ID,重试和重放期间不变——不解析 body 即可按它去重。持久化已处理的 ID,把重复当作 200 OK 空操作。
什么算投递成功
- 10 秒内返回 HTTP
2xx→ 投递成功 - HTTP
4xx或5xx→ 计为失败,将重试 - 连接被拒、DNS 失败、TLS 错误 → 计为失败,将重试
- 超过 10 秒才响应 → 计为失败,将重试(你的端点可能仍会处理这个重复事件)
事件在你侧持久化后立刻返回 2xx。把昂贵处理推迟到后台队列,让 webhook 处理器保持在超时以内。