在开始介绍Seata的时候 先说其产生的为何

在下面的验证中 我们用一个例子项目 来验证 先弄清楚这个项目结构

参考:尚硅谷同官网项目

架构图
image

我自己大致表示的
image

模拟一个现实中的使用:
假设在order创建订单服务有个业务报错

image

此处业务问题后 就会导致 库存少了 订单未创建 余额还减少了

可能我们会想到加上注解实现回滚

@Transactional

这些都是开始调用前的状态
image
image
image

调用后
image
image
image

可以发现即使 我们加上了@Transactional注解回滚的也是本服务中 因为之前的都为单体项目即一个服务中的 所以可以整体回滚 但现在我们所处的阶段为微服务分布式阶段啊 多个服务 即多个项目 所以咱们就要想能不能一个总体来让所有微服务项目整体实现回滚 所以就需要一个老大来管理

Seata官网:https://seata.apache.org/zh-cn/docs/user/quickstart/

image

我理解的仨玩意
TC:老大 服务端
TM:总体管理
RM:各个服务

那我们来使用一下Seata
先安装它 然后进入bin目录

命令行启动 seata-server.bat

image

在项目中使用 加入依赖:

      <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
        </dependency>

还得让各个服务被TC识别到

seata中config配置文件
image

默认为file单机模式 就需要配置在各个微服务项目中加入file.conf文件

service {
  vgroupMapping.default_tx_group = "default" 事务分组
  default.grouplist = "127.0.0.1:8091"  TC服务地址 当type类型为file时才能生效
  enableDegrade = false 降级
  disableGlobalTransaction = false 使用全局事务
}

这样启动后Seata就会识别到 这个时候加入一个全局事务 实现全体回滚
注意加在TM上 即business服务上
image

这个时候再启动项目服务 数据恢复到之前源数据 再次验证

image

上述Seata发挥作用 事务整体回滚

那来简单简单阐述一下原理
image

打上断点后
seata中可以监控到
image
同样存储在undo_log文件中也拿到镜像前文件 即修改前的文件
image

这样综上所述 实现整体回滚
至于还有各种事务模式 我们采用的是AT模式 即自动模式 关于其机制一二阶段也上述介绍

image

五大组件的总结学习杀青 当然这只是简单快速学习一下 至于深入 接下来以尝试微服务项目中深入学习

posted on 2025-03-21 12:34  蒸饺  阅读(88)  评论(0)    收藏  举报