← 中文资源

简体中文版本

构建带签名重试的 Webhook 转发器

Webhook 中继:入队入 SQLite、HMAC-SHA256 签名投递、指数退避重试与逐事件投递状态查询。

阅读英文原文

目标

构建接收事件 post、持久化入队、以 HMAC-SHA256 签名与时间戳投递到目标 URL、按指数退避重试直至成功或达到次数上限的 Webhook 转发器。

要点

核心契约是 at-least-once:claim 与 delivery 分离,崩溃后清扫器把 in-flight 行重新入队。签名覆盖“时间戳.原始字节”,绝不能对重新序列化的 JSON 签名;5xx/429 走退避重试,4xx 立即进死信等待接收方修复后重放。

提示

投递状态端点回答运维两问:有没有卡住、上次失败说了什么——数据直读队列表,无第二事实源。

验证

签名单测对预计算向量校验;集成测试真的杀死进程验证恢复路径;打桩接收器按脚本序列返回 500、500、200 断言退避时间。 项目目录骨架:

webhook-forwarder/
├── src/
│   ├── server.js
│   ├── dispatcher.js
│   ├── signer.js
│   ├── queue.js
│   └── config.js
├── test/
│   ├── signer.test.js
│   └── dispatcher.test.js
├── hooks.json
└── package.json

实施阶段:Signed envelope → Durable queue → Dispatcher with backoff → Ingest and status API。