订单系统中的幂等实现

一.订单提交的例子

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

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

1.1 后端系统层面

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

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

token的获取:

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

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

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

1.1.2 如何保证订单支付幂等

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

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

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

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

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

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

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

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

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

相关推荐
阿里云云原生4 小时前
阿里云微服务引擎 MSE 及 API 网关 2026 年 4 月产品动态
微服务·云原生
彩旗飘飘4 小时前
手把手教你用 Spring Cloud Alibaba 搭建毕设级微服务架构:从单体到分布式的完整演进实录
spring cloud·微服务
苍煜6 小时前
现代生产级微服务+容器治理完整技术栈与架构方案详解(国内主流完整云原生微服务闭环架构)
微服务·云原生·架构
文慧的科技江湖12 小时前
零碳园区综合管理平台PRD需求文档 - 慧知开源充电桩平台
spring cloud·微服务·开源·能源·慧知开源光储充管理平台·慧知开源光储充管理系统·零碳园区管理平台
努力努力再努力wz12 小时前
【Redis 入门系列】为什么需要 Redis?一文串起缓存、分布式、读写分离、分库分表与微服务
数据库·redis·分布式·sql·mysql·缓存·微服务
团象科技12 小时前
当出海合规压力持续上升时,多云服务容易忽略哪些细节
大数据·微服务·架构
番茄去哪了12 小时前
单体转微服务:微服务保护和分布式事务(上)
分布式·微服务·架构
Flittly12 小时前
【日常小问】解决 Jenkins 部署 Spring Cloud 微服务到 Docker 容器启动失败的问题
运维·笔记·docker·微服务·jenkins
aXin_ya13 小时前
微服务第十一天 MQ相关问题
java·微服务·架构
一起学开源13 小时前
业务架构如何指导微服务拆分?
微服务·云原生·架构·架构设计·微服务拆分·业务架构