订单系统中的幂等实现

一.订单提交的例子

一个订单生成并支付的过程,大致为:用户点击前端页面提交订单->后端根据此次提交信息生成订单->用户确认订单并进行支付操作->支付成功。

主要分为前端层面,后端系统层面,数据库层面。前端层面不详述,大约是防抖动处理之类的(按钮几秒内禁用)。

1.1 后端系统层面

1.1.1 如何保证生成唯一的订单ID。

为用户界面生成唯一的++token++,并根据此token生成相应的订单ID。

token的获取:

通过令牌桶、队列等等方式。

针对该token对应的数据操作:

分布式锁、事务,保证该token操作的唯一性、原子性,直至生成订单行ID

1.1.2 如何保证订单支付幂等

以订单ID作为唯一标识,贯穿后续操作

订单状态验证、分布式锁、事务保证订单操作的正确性、唯一性、原子性:

其中状态验证主要是保证多线程的处理的时候,订单流转不错乱。

分布式锁保证只有一个线程在处理该带哪个单

事务保证一个线程种,订单相关操作的原子性,一致性。

通过同步接口、轮询机制、重试机制进行支付结果获取:

同步接口若直接返回支付成功,则支付成功。

若未返回,重试(这里要有支付唯一标识)或者轮询结果(查询接口),来获取支付结果,更新订单状态,返回给用户结果(同步接口直接返回,接口超时可以要求用户刷新页面等)。

待补充微服务间的接口、消息幂等,数据一致性等

相关推荐
米丘3 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质6 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯6 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y6 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰6 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了6 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking
至乐活着7 天前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose
就改了7 天前
微服务异步场景链路断裂完整解决方案
微服务·云原生·架构
山东点狮信息科技有限公司7 天前
点狮OA-企业级 OA 办公自动化系统架构设计与实践
spring cloud·微服务·性能优化·架构·系统架构