订单系统中的幂等实现

一.订单提交的例子

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

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

1.1 后端系统层面

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

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

token的获取:

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

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

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

1.1.2 如何保证订单支付幂等

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

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

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

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

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

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

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

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

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

相关推荐
indexsunny39 分钟前
互联网大厂Java面试实战:Spring Boot与微服务在电商场景的应用解析
java·spring boot·redis·微服务·kafka·gradle·maven
小北方城市网2 小时前
微服务接口设计实战指南:高可用、易维护的接口设计原则与规范
java·大数据·运维·python·微服务·fastapi·数据库架构
魂之木3 小时前
Nacos服务器端部署方案
微服务·nacos·服务端部署
努力搬砖的咸鱼3 小时前
用 Docker 部署你的第一个微服务
docker·微服务·云原生·容器
面汤放盐3 小时前
软件架构指南 Software Architecture Guide
java·微服务·devops
一条咸鱼_SaltyFish4 小时前
Spring Cloud Gateway鉴权空指针惊魂:HandlerMethod为null的深度排查
java·开发语言·人工智能·微服务·云原生·架构
一条咸鱼_SaltyFish1 天前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
2503_946971861 天前
【Kernel/Consensus】2026年度第二周内核重构与分布式共识战争基准索引 (Benchmark Index)
网络安全·微服务·重构·数据集·分布式系统·系统内核
程序猿阿伟1 天前
《Python生态事件溯源与CQRS轻量化落地指南》
大数据·python·微服务
超级小猪1 天前
007-spring cloud alibaba之Sentinel限流
微服务