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

springcloud3 分布式事务解决方案seata之XA模式4

一  seata的模式

1.1 seata的几种模式比较

Seata基于上述架构提供了四种不同的分布式事务解决方案:

  • XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入

  • TCC模式:最终一致的分阶段事务模式,有业务侵入

  • AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式

  • SAGA模式:长事务模式,有业务侵入

无论哪种方案,都离不开TC,也就是事务的协调者。

1.2 seata的XA模式原理

XA:依赖关系型数据库实现事务实现,基于二阶段提交。

RM一阶段的工作:

​ ① 注册分支事务到TC

​ ② 执行分支业务sql但不提交

​ ③ 报告执行状态到TC

TC二阶段的工作:

  • TC检测各分支事务执行状态

    a.如果都成功,通知所有RM提交事务

    b.如果有失败,通知所有RM回滚事务

RM二阶段的工作:

  • 接收TC指令,提交或回滚事务

截图如下:

1.3 优缺点

XA模式的优点是什么?

  • 事务的强一致性,满足ACID原则。

  • 常用数据库都支持,实现简单,并且没有代码侵入

XA模式的缺点是什么?

  • 因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差

  • 依赖关系型数据库实现事务

二  操作案例

2.1 XA模式配置

1.order服务

2.account服务

3.storage服务

2.2 发起全局事务的入口方法添加@GlobalTransactional注解

本例中是OrderServiceImpl中的create方法。

2.3 服务启动

1启动nacos

2.启动seata

2.4 验证

2.4.1 初始态表中数据

1.account表

2.order表

3.storage表

 

2.4.2 正常下订单操作

1.请求

http://localhost:8082/order?userId=user202103032042012&commodityCode=100202003032041&count=3&money=200

2.查看此时表中数据变化: 均实现了正确的扣减操作

 

 2.4.3  正常下订单大于库存数操作

1.请求: 库存为5个,而现在要下订单30个,请求后出现问题

http://localhost:8082/order?userId=user202103032042012&commodityCode=100202003032041&count=30&money=200

2. 查看程序后台:均提示回滚操作

2.1 account模块

2.2 order模块

2.3  storage模块

 

3.查看数据表:数据表中的信息也均进行回滚,没有出现脏数据,或者不一致的情况。

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

相关文章:

  • 编译ctk源码
  • 前后端分离的低代码快速开发框架
  • 【Java 基础篇】Java同步代码块解决数据安全
  • 亿纬锦能项目总结
  • 简明 SQL 组合查询指南:掌握 UNION 实现数据筛选
  • 【springMvc】自定义注解的使用方式
  • 求二维子数组的和(剖析)
  • 无(低)代码开发思路介绍
  • 代码随想录刷题 Day14
  • 二分类问题的解决利器:逻辑回归算法详解(一)
  • docker alpine镜像中遇到 not found
  • python的多线程多进程与多协程
  • 一文介绍使用 JIT 认证后实时同步用户更加优雅
  • 搞定“项目八怪”,你就是管理高手!
  • 机器视觉-标定篇
  • linux离线安装make
  • 【深度学习】卷积神经网络(LeNet)【文章重新修改中】
  • win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版
  • 2023/9/20总结
  • 【Git】git 分支或指定文件回退到指定版本
  • Java 消息策略的实现 - Kafak 是怎么设计的
  • c++opencv RotatedRect 旋转矩形角度转换和顶点顺序转换
  • Flink-CDC 抽取SQLServer问题总结
  • Linux 系统目录结构 终端
  • Layui + Flask | 实现注册、登录功能(案例篇)(08)
  • GitLab数据迁移后出现500错误
  • 音乐随行,公网畅享,群辉Audiostation给你带来听歌新体验!
  • 机器学习入门:从算法到实际应用
  • 【Vue.js】vue-cli搭建SPA项目并实现路由与嵌套路由---详细讲解
  • Node.js 调用 fluent-ffmpeg