八、Spring Cloud Alibaba 使用 Nacos + Seata 实现分布式事务

一、Spring Cloud Alibaba 特点

二、Spring Cloud Alibaba 注册中心 Nacos 搭建

三、Spring Cloud Alibaba 和Spring Boot、Spring Cloud 版本依赖关系

四、如何搭建 Spring Cloud Alibaba 服务提供者?

五、如何搭建 Spring Cloud Alibaba 服务消费者?

六、Spring Cloud Alibaba 多环境配置

七、Spring Cloud Alibaba 集成 OpenFeign

八、Spring Cloud Alibaba 使用 Nacos + Seata 实现 AT 分布式事务(只讲实现,不讲具体的原理)

具体原理可以参考官方文档

注意:seata 配置 比较繁琐,请按照以下步骤配置,如遇问题可以留言。

1、安装 Seata

2、打开 Seata conf 目录配置Nacos支持

​ 2.1 修改 registry.conf

registry {
  type = "nacos"  # 修改成nacos
  loadBalance = "RandomLoadBalance"
  loadBalanceVirtualNodes = 10

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }
}

config {
  type = "nacos" # 修改成nacos

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
  }
}

3、下载Seata 脚本支持,建议直接把项目下载下来

​ 3.1 在每个业务数据库中插入一个undo_log 表

-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';

4、初始化配置到Nacos

​ 4.1 本文采用的是At事务模式,所以 seata-develop\seata-develop\script\config-center\config.txt 不用修改;其他模式则需要修改 文章高亮部分img

​ 4.2 启动Nacos后,使用命令初始化config.txt配置到nacos

​ 进入 seata-develop\seata-develop\script\config-center\nacos 目录 打开命令行工具git 输入命令

sh nacos-config.sh config.txt img

执行后打开nacos客户端会发现刚刚的配置已经初始化进来了img

5、添加maven依赖

     <!--seata-->
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

6、yml 配置seata

seata:
  service:
    vgroup-mapping:
      my_test_tx_group: default  #请注意!这个key my_test_tx_group 为config.txt中配置的 Data Id 尾巴
  tx-service-group: my_test_tx_group   #请注意!这个value 为config.txt中配置的 Data Id 尾巴
  config:
    type: nacos
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group : "SEATA_GROUP"
      namespace: ""
      cluster: "default"
      username: "nacos"
      password: "nacos"

此处呼应上面提到的 my_test_tx_group

img

7、使用@GlobalTransactional() 添加 事务

@GlobalTransactional()
@GetMapping("/user/update")
public void userUpdate() {
    testDao.insertUser();
    userClient.updateUser();
}

8、测试结果我就不放出来了,没啥意义,欢迎大家留言。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值