springboot使用AT模式整合seata,超详细

1:简介

2.搭建seata-server服务端 

2.1 下载

我本人选用版本是1.4.2,因为1.5.X以后需要搭配skywaking,作为入门,就选择简单点的

下载地址:Releases · seata/seata (github.com)

 2.2配置seata-sever

修改conf文件夹下面的两个文件配置 file.conf registry.conf

修改mode="db" 下面是对应的数据库配置,需要再本地新建一个seata库,并执行以下sql,sql地址:

seata/mysql.sql at 1.4.2 · seata/seata · GitHub

配置好以后就可以去bin目录下面双击bat启动了,Linux就运行.sh后缀的启动

3.配置AT模式 的TM 客户端  因为TM是业务发起端,里面调用了A B C多个服务

3.1引入pom

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

注意:引入pom以后 这个jar版本要跟seata-server一致

如果不一致可以采用 排除自带的seata-all再单独引入

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <version>2.2.3.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

3.2配置application.yml

seata:
    tx-service-group: my_test_tx_group # 一定用这个默认的
    enabled: true
    registry:
        type: nacos
        nacos:
            application: seata-server  #注册在nacos服务名
            server-addr: 120.79.153.165:8848
            group : dev
            namespace: "11c50b6d-cc03-47ad-b1ec-f539f5facedf" #注册在nacos命名空间
            username: nacos
            password: nacos

如果报错 can not get cluster name in registry config 'service.vgroupMapping.yomall-product-seata-service-group', please make sure registry config correct 就是没有做配置

然后在TM 所连接的数据库上新建表undo_log,用于TM回滚的,如果A B C服务在TM不是同一个库,也需要分别都新建表undo_log

CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `context` varchar(128) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  `ext` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

4.业务代码使用

在需要做全局事务回滚的代码加上注解

@GlobalTransactional

5.配置AT模式 的RM 客户端 ,就是步骤 3 TM调用的对应服务

步骤跟3一致 ,只是不需要加上

@GlobalTransactional注解

6.seata大概实现原理: 通过aop代理 ,代理dataSource对象 在执行sql前写入对应的undo_log日志,当反生异常的时候执行对应的事务执行回滚信息 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值