Webhook 投递与重试

ModelRiver 使用指数退避,最多执行 8 次重试。你可以监控投递结果并检查死信队列。

重试策略

ModelRiver 使用如下指数退避时间表:

尝试次数延迟累计时间
1立即0s
25 秒5s
330 秒35s
42 分钟2m 35s
510 分钟12m 35s
630 分钟42m 35s
71 小时1h 42m 35s
82 小时3h 42m 35s

8 次都失败后,该 webhook 会被移入 Dead Letter Queue (DLQ),供人工排查。

成功投递

你的端点应返回 2xx 状态码(推荐 200 OK)来确认已成功接收。只要返回任意 2xx,ModelRiver 就不会继续重试。

触发重试的情况

以下任一情况都会导致重试:

  • 返回非 2xx 状态码(4xx、5xx)
  • 网络超时(默认 30 秒)
  • 连接被拒绝或 DNS 解析失败
  • TLS 握手失败

监控 Webhooks

所有 webhook 投递都会记录在项目的 Request Logs 中:

  • Timeline view 展示每次投递尝试与时间戳
  • 状态标识 区分成功、失败和待重试
  • Payload inspection 可查看实际发送的数据
  • Callback logs(事件驱动工作流)可查看你后端的回调结果

你可以按 event_name 过滤日志,以定位特定事件驱动工作流。

死信队列(DLQ)

当所有重试都耗尽后:

  1. 该投递会移入 DLQ
  2. 原始载荷会被保留,供排查使用
  3. 你可以在控制台手动重新投递
  4. DLQ 条目默认保留 30 天

最佳实践

  • 快速响应:尽快返回 200 OK,将实际处理放入后台任务
  • 实现幂等性:使用 channel_id 去重,因为重试会重复投递同一载荷
  • 监控投递成功率:在可观测性中跟踪 webhook 成功率,尽早发现问题
  • 做健康检查:持续监控 webhook 端点可用性
  • 记录失败详情:把非 2xx 响应与错误原因写入日志

下一步