分布式事务: 分布式事务的问题: 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 使用