design-patterns - 了解如何在分布式系统中立即返回错误以进行支付
问题描述
处理大量支付的常见架构(例如,如果您是一个送餐应用程序)是具有某种分布式消息传递的 pub/sub 架构,例如 Kafka。消费者然后调用第三方支付处理器。在某些情况下,第三方支付处理器可能会超时或关闭,因此需要额外的设置来处理重试。数据库通常也参与跟踪支付状态,例如让额外的消费者在数据库中设置记录。一个我难以理解的问题是,如果存在合法错误,例如卡详细信息不正确,如何及时将该错误返回给用户?我们可能不想立即给用户一个成功消息,然后再给他们一个错误?
解决方案
支付流程应该是高度一致的,用户需要知道(在离开页面之前)支付是否发生。我可以想到两种方法来实现这一目标:
- 如果你有一个事件驱动的架构,你可以为支付请求/响应创建专用队列,并确保瓶颈在第三方支付处理器中,而不是在你系统的某个地方。前端可以只轮询结果(当然以异步方式)并一致地通知用户付款状态。
- 如果可行,您可以使用 HTTP/gRPC 中已经设计好的请求-响应模型,上面提到的方法基本上做同样的事情,但在事件驱动的世界中。因此,API 网关没有将消息放入队列,而是直接调用支付微服务。
推荐阅读
- java - Spring-data-aerospike 无法将字段设置为 null
- debugging - 调试 Docker 容器以 0 退出
- kotlin - Kotlin:可见性修饰符更改匿名对象的类型
- java - 使用 Java 将变量传递给 @AndroidFindBy 注解
- wordpress - 内部服务器错误。登录 wordpress 网站时遇到问题
- android - Android WebView:用 PDF 显示网站
- python - Python pandas - 分组、计数、绘制多系列
- visual-studio-2015 - Visual Studio 2017 的全新安装缺少 F# 的部分
- typescript - mat-grid-list with a mat-card and mat-card-actions/mat-card-footer
- python - 如何修复这个 sqlite3.OperationalError / sql 语法错误?