当前位置: 首页 > news >正文

订单系统中的幂等实现

一.订单提交的例子

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

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

1.1 后端系统层面

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

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

        token的获取:

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

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

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

1.1.2 如何保证订单支付幂等

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

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

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

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

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

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

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

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

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

http://www.lryc.cn/news/99614.html

相关文章:

  • 三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询
  • 列表、张量、向量和矩阵的关系
  • 华为数通HCIP-ISIS高级
  • CorelDraw怎么做立体字效果?CorelDraw制作漂亮的3d立体字教程
  • 大致了解Redis
  • javaweb会话技术
  • android app控制ros机器人三(android登录界面)
  • Android版本的发展4-13
  • 【2023.7.29】浅谈手办——新人入坑指南
  • 使用贝叶斯算法完成文档分类问题
  • 【Kafka】消息队列Kafka进阶
  • 学习day55
  • C++-Rust-一次性掌握两门语言
  • 汇编调用C语言定义的全局变量
  • WEB 文件包含 /伪协议
  • ComPDFKit PDF SDK库(支持Windows、Web、Android、iOS、Mac等平台)
  • 微服务契约测试框架-Pact
  • LightGlue论文翻译
  • iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果
  • 《Elasticsearch 源码解析与优化实战》第5章:选主流程
  • Spring Cloud Alibaba - Nacos源码分析(三)
  • DOCKER镜像和容器
  • 探索网页原型设计:构建出色的用户体验
  • 48,排序算法merge
  • 【MySQL】复合查询
  • JavaScript中的this指向及绑定规则
  • css中预编译理解,它们之间区别
  • 如何使用Java处理JSON数据?
  • java设计模式-观察者模式
  • HiveSQL SparkSQL中常用知识点记录