09 / 13
通知 Webhook
三种事件、outbox 重试语义与投递日志
事件
backup_failed:备份任务失败。backup_expired:某库的保护状态过期——包括“最新成功备份超过新鲜度阈值”和 “从未成功过”两类(暂停的库不再产生新的过期事件)。verification_failed:恢复验证失败(任务本身仍为 succeeded)。
每个事件向每个匹配的 webhook 各发送一次 JSON POST(一次轮询可能向多个目标 POST;
失败重试时会再次访问上一轮已成功的目标),带
X-Supacove-Event 与 X-Supacove-Event-ID 头(稳定去重键;过渡期同值发送改名前的 X-Supabackup-* 旧头)。
投递语义(outbox)
- 事务性:正常情况下通知与任务终态同一事务提交;补偿路径(失败回退入队 + 调度器 对账扫描)提供持久保证,不会永久丢失通知。
- 至少一次:失败按 30/60/120/240 秒退避重试,最多 5 次;耗尽后标记
dead(界面上可见,不会静默丢弃)。 - 单实例:投递租约与去重假设一个运行实例(进程锁强制)。
测试与排查
- “发送测试”立即做一次真实投递(不经过 outbox),返回送达与否与错误类别。
- “投递日志”显示每条通知的状态、
attempts(累计失败轮数,成功不计数,不等于 HTTP 请求总数)与最后错误(错误已分类脱敏,不含 URL)。 - webhook URL 允许指向内网/回环(自托管接收器是合法场景),但拒绝链路本地地址与
云元数据端点(含 IPv6
fd00:ec2::254与 NAT64 编码)。
最后更新