springcloud24:分布式事务 Seata处理分布式事务总结篇

  • 分布式事务:
    分布式事务的问题:
    • 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处理分布式事务总结篇_第1张图片

你可能感兴趣的:(springcloud,分布式,java,spring)