stage5 day09&day10分布式事务 ---- seata AT,TCC

学习链接:分布式事务(三)Seata分布式事务框架-AT模式介绍

saeta 事务适用于80%的业务场景

事务协调器 TC

在这里插入图片描述

seata-server 启动配置

file.conf

在这里插入图片描述

在这里插入图片描述

seata-server

在这里插入图片描述
在这里插入图片描述

启动seata-server

seata-server.bat

查看注册表
在这里插入图片描述

注意:

  • 必须使用jdk1.8
  • 命令窗口不能关闭
  • 命令窗口不能选中,否则运行的应用会挂起,暂停
    选中后右键或esc取消选中,

一,在业务模块中 Seata At 事务

  1. seata 依赖

  2. 配置
    application.yml ---- 事务组的组名
    registry.conf ---- 注册中心的地址
    file.conf ---- 事务组对应使用哪个协调器

    与之前启动时配置内容不同

  3. 在自动配置类中,创建数据源代理对象,用来执行AT事务的自动事务控制代码
    sql语句交给数据源代理对象处理datasource proxy ,新旧数据保存到回滚日志表

  4. 业务方法添加注解
    @Transactional ---- 只用来控制本地事务
    @GlableTansactional -----启动全局事务 ,只需要在第一个模块添加

学习链接:分布式事务(五)Seata AT模式-Spring Cloud微服务添加 AT 分布式事务

1 order订单服务添加 Seata AT 事务

1.1 seata工程无事务版本 依赖打开

在这里插入图片描述

如果只添加了依赖,没有做后面配置步骤,或配置错误,项目无法启动
在这里插入图片描述

1.2 配置

在这里插入图片描述

application

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 单独启动订单业务测试

GET http://localhost:8083/create?userId=1&productId=1&count=10&money=100

2 storage库存服务添加 Seata AT 事务

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3启动测试

GET http://localhost:8083/create?userId=1&productId=1&count=10&money=100

在这里插入图片描述
在这里插入图片描述

3 account 账户服务添加 Seata AT 事务

  1. 复制file.conf,registry.conf,DSAutoConfig
  2. application.yml中添加指定的事务组 组名
  3. datasource下添加 jdbc-url
  4. 启动类中 排除spring的数据源配置,使用自定义的数据源自动配置类
  5. AccountServiceImpl 中添加本地事务注解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

打开OrderServiceImpl 中调用account

在这里插入图片描述

三个服务 都能看到 事务提交日志

GET http://localhost:8083/create?userId=1&productId=1&count=10&money=100

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

回滚 测试

在AccountServiceImpl中添加随机异常测试
建议先初始化数据库

GET http://localhost:8083/create?userId=1&productId=1&count=10&money=100

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

二,Seata TCC模式

学习链接: 分布式事务(六)Seata TCC模式-TCC模式介绍
学习链接: 分布式事务(七)Seata TCC模式-Spring Cloud微服务添加 TCC 分布式事务

  1. 新建Empty project: seata-tcc

  2. seata-at 无事务版本.zip,解压到seata-tcc目录

  3. 导入模块

  4. seata-依赖

  5. 配置
    application.yml
    registry.conf
    file.conf

  6. 修改Mapper ,添加数据库操作

  7. 按照seata tcc规则,添加TccAction接口和实现类
    三个方法上都要添加@Transactional

  8. 修改业务代码 ,手动调用 tcc 的第一阶段方法(冻结数据),
    第二阶段(提交或回滚) ,由RM资源管理器控制执行

  9. 在第一个模块添加注解 @GlobalTransactional

order

6 修改Mapper ,添加数据库操作

在这里插入图片描述

创建冻结订单sql

注意order是关键字,需用反引号包裹
在这里插入图片描述

修改订单状态sql

在这里插入图片描述

删除订单sql

在这里插入图片描述

7. 按照seata tcc规则,添加TccAction接口和实现类

三个方法上都要添加@Transactional
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8. 修改业务代码 ,手动调用 tcc 的第一阶段方法(冻结数据),

第二阶段(提交或回滚) ,由RM资源管理器控制执行

9. 在第一个模块添加注解 @GlobalTransactional

storage

在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述

两个问题

  1. 第一阶段冻结数据如果失败,第二阶段的回滚仍然会执行
    1000 0
    1100 -100
    可用变负数,
  2. 出错或超时可能会重复执行提交,回滚数据
    如果第二阶段执行出错,或者超时,TC会重复下发指令,要求这个模块重新执行第二阶段操作

在这里插入图片描述
在这里插入图片描述

重置数据

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

解决 幂等性

多次操作,和第一次操作的结果相同

account

在这里插入图片描述
在这里插入图片描述

测试

初始数据
在这里插入图片描述

GET http://localhost:8083/create?userId=1&productId=1&count=10&money=100

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值