首页 > 解决方案 > 了解如何在分布式系统中立即返回错误以进行支付

问题描述

处理大量支付的常见架构(例如,如果您是一个送餐应用程序)是具有某种分布式消息传递的 pub/sub 架构,例如 Kafka。消费者然后调用第三方支付处理器。在某些情况下,第三方支付处理器可能会超时或关闭,因此需要额外的设置来处理重试。数据库通常也参与跟踪支付状态,例如让额外的消费者在数据库中设置记录。一个我难以理解的问题是,如果存在合法错误,例如卡详细信息不正确,如何及时将该错误返回给用户?我们可能不想立即给用户一个成功消息,然后再给他们一个错误?

标签: design-patternsarchitecturestripe-paymentspaymentdistributed

解决方案


支付流程应该是高度一致的,用户需要知道(在离开页面之前)支付是否发生。我可以想到两种方法来实现这一目标:

  • 如果你有一个事件驱动的架构,你可以为支付请求/响应创建专用队列,并确保瓶颈在第三方支付处理器中,而不是在你系统的某个地方。前端可以只轮询结果(当然以异步方式)并一致地通知用户付款状态。
  • 如果可行,您可以使用 HTTP/gRPC 中已经设计好的请求-响应模型,上面提到的方法基本上做同样的事情,但在事件驱动的世界中。因此,API 网关没有将消息放入队列,而是直接调用支付微服务。

推荐阅读