项目描述
翻译可靠性是关键,因此我最关心的是订阅者的失败。每次交付尝试必须签名,以便接收者可以验证它来自我们,携带时间戳和唯一交付 ID 以防止重复,并在出错时以指数退避和抖动重试,直到可配置的限制,然后转入死信状态。我们需要每个端点的并发限制,以便一个过载的订阅者不会消耗其他端点的资源,并且需要幂等性密钥,以确保重试不会在接收方造成重复。明确范围:这不是用于内部任务的一般消息队列,也不是代理传入流量的 API 网关。这是关于可靠地将外发 webhook 交付给第三方,队列只是一个内部机制,而不是结果。
我还需要可观察性和管理功能,以便我可以交给支持和合作伙伴。每次尝试都应该记录在交付日志中,包括请求、响应代码、延迟和重试次数,可以按事件、端点和状态进行搜索。应该有一种手动重试失败或死信交付、暂停端点和恢复它、以及在不宕机的情况下轮换签名密钥的方法。请将其视为生产基础设施——有清晰的文档和测试,而不是原型。
— 接收传入事件的端点,带有验证和持久性
— 订阅模型:将事件类型与订阅者端点匹配
— 带有时间戳、交付 ID 和重复保护的签名有效负载
— 带有指数退避、抖动和死信状态的重试
— 每个端点的并发限制和幂等性处理
— 带有搜索、手动重试和端点暂停的交付日志
— 密钥轮换、文档和自动测试