- 分布式事务:
分布式事务的问题:- 1:1 一个servlet 对应一个 数据库
- 1:N 一个servlet对应多个数据库
- N:N 多个servlet对应多个数据库
全局事务一致性问题(全局数据一致性的保证)
- Seata是分布式事务的解决方案
分布式ID+三组件模型 全局唯一事务的ID- 三组件
- TC 事务协调器:维护全局事务的运行状态,驱动全局事务提交或回滚
- TM 服务发起提交回滚
- RM 管理分支事务
- 一个XID 对应一系列的微服务(组成一个事务)
- 微服务 利用RM 连接数据库
- 处理过程
- TM向TC申请一个XID(全局唯一事务),且TM能够将XID上下文传播(调用的服务也会获得XID)
- RM向TC注册事务
- TM向TC发起唯一XID的全局提交或回滚
- TC调度XID下的全部事务分支完成提交或回滚请求
- 三组件
- Seata的下载安装使用
@Transaction 事务(本地控制事务 spring的)
@GlobalTransaction 全局事务(全局控制事务 springcloud的) - 测试
- 流程
用户 下单:订单服务中创建订单,调用库存服务扣减商品库存,再远程调用账户服务扣减账户余额,最后再订单服务中修改订单状态已完成
三个数据库 两次远程调用(明显有分布式事务问题) - 完成订单模块微服务
- 改Pom 写yml 把seata修改的配置文件放入(注册到mysql)
- 写与数据库对应的domain
- 编写DAO(以及xml映射文件)
- 编写service(利用feign实现远程调用)
- 编写controller(三个库调用时会出现事务不一致)
- 使用@GlobalTransaction
- 流程
- 使用
springcloud24:分布式事务 Seata处理分布式事务总结篇
于 2022-11-27 12:21:56 首次发布