目标
构建接收事件 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。