生产环境中的重复Webhook事件会创建额外的订单
问题 我们遇到了一个结账事故,支付Webhook在我们的处理器响应太慢后重试。第一次请求实际上创建了订单,但响应在提供商侧超时。一分钟后,同一事件再次出现,我们的工作器将其视为新的结账,并且两个订单出现在OMS中,仅对应一次支付。 最初看起来像是前端的双击,因为两个记录具有相同的cart_id和客户电子邮件。线索在Webhook交付日志中:相同的provider_event_id,不同的请求ID,相隔约64秒。我们的API日志仅包含内部的order_id,因此匹配链花费的时间比应该的要长。 我们做出的改变 我们将幂等性检查移到了每个副作用之前。现在Webhook处理器启动一个数据库事务,将provider_event_id插入具有唯一约束的Webhook_events账本中,只有第一次插入被允许排队创建订单。如果插入冲突,我们返回200并将其标记为重复交付,而不是应用程序错误。 我们还停…