SpringCloud Alibaba微服务中seata1.4+nacos+mysql实现分布式事务的配置


一。解决的问题

seata的出现是为了更好的解决分布式事务的问题,相比于之前的单机库,服务只操作一个数据库的时候,用我们大家熟悉的@Transactional注解就能做好一些单一事务的控制。但是微服务架构之后,各个服务所调用的数据库可能不一致,就造成了一个服务对应多个数据库或者多个服务对应多个数据库的情况,就会出现下图的情况:

在这里插入图片描述
一句话来说,一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题。


二。Seata简介

seata官网文档:http://seata.io/zh-cn/docs/overview/what-is-seata.html

1.Seata 是什么?

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

2.三大组件

  • TC (Transaction Coordinator)- 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。
  • TM (Transaction Manager)- 事务管理器定义全局事务的范围:开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
    在这里插入图片描述

3.处理过程

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

4.使用方法

使用方法很简单,只需要在需要做分布式事务控制的业务逻辑代码上加上@GlobalTransactional注解即可。
在这里插入图片描述


三。seata1.4+nacos+mysql配置

1.seata准备

官方文档强烈推荐我们使用seata1.4来使用Nacos作为配置中心:
在这里插入图片描述
所以我们选择下载1.4版本,下载地址如下:https://github.com/seata/seata/releases
在这里插入图片描述
下载完成后,文件夹内容如下:
在这里插入图片描述

2.修改file.conf,registry.conf配置文件内容

注意:修改之前记得先进行备份操作

打开conf文件夹:
在这里插入图片描述
修改file.conf
在这里插入图片描述
修改registry.conf
在这里插入图片描述

3.下载config.txt与nacos-config.sh文件

1.4版本config.txt下载地址:
https://github.com/seata/seata/blob/1.4.0/script/config-center/config.txt

1.4版本nacos-config.sh下载地址:https://github.com/seata/seata/blob/1.4.0/script/config-center/nacos/nacos-config.sh

这两个文件的作用:
config.txt就是seata各种详细的配置,执行 nacos-config.sh
即可将这些配置导入到nacos,这样就不需要将file.conf和registry.conf放到我们的项目中了,需要什么配置就直接从nacos中读取。

nacos-config.sh操作流程

在nacos中新建一个命名空间seata:
在这里插入图片描述
拿到seata的命名空间id:
在这里插入图片描述
打开nacos-config.sh的存放路径,右键打开GitBash命令行:
在这里插入图片描述
输入命令行,将这些配置导入到nacos的seata命名空间中:

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t adb63345-4bbf-4db3-9e1c-12df6146e52b -u nacos -w nacos

命令解析:

  • -h -p 指定nacos的端口地址;
  • -g 指定配置的分组,注意,是配置的分组;
  • -t 指定命名空间id;
  • -u -w指定nacos的用户名和密码,同样,这里开启了nacos注册和配置认证的才需要指定。
    在这里插入图片描述

导入成功的标志:
在这里插入图片描述
nacos中可以看见相关配置:
在这里插入图片描述

config.txt操作流程

修改config.txt配置文件内容:
在这里插入图片描述
将其放在config同级目录下:
在这里插入图片描述

4.数据库文件

1.4版本mysql数据库语句:https://github.com/seata/seata/blob/1.4.0/script/server/db/mysql.sql

在这里插入图片描述

全部导入数据库后,seata数据库如下所示:
在这里插入图片描述


四。启动Seata

1.首先启动nacos,保证nacos运行正常:
在这里插入图片描述
2.点击bin目录下的seata-server.bat文件,启动seata:
在这里插入图片描述
3.启动成功:
在这里插入图片描述
4.打开nacos,可以找到seata注册的服务:
在这里插入图片描述
(注:注册服务默认分组为SEATA_GROUP,若需要修改分组,修改registry.conf配置文件即可)


五。项目配置

1.在pom.xml文件中导入seata依赖:

<!--seata 1.4版本依賴 -->
 <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>

2.增加application.yml配置:

spring:
  cloud:
    alibaba:
      seata:
        enabled: true
        enable-auto-data-source-proxy: true #开启使用seata对数据源进行代理
        #在nacos上查找seata的配置信息
        tx-service-group: my_test_tx_group
        registry:
          type:
          nacos:
            application: seata-server
            server-addr: localhost:8848
            username: nacos
            password: nacos
        config:
          type: nacos
          nacos:
            server-addr: localhost:8848
            group: SEATA_GROUP #默认上传的组名
            username: nacos
            password: nacos
            namespace: adb63345-4bbf-4db3-9e1c-12df6146e52b
        service:
          vgroup-mapping:
            my_test_tx_group: default
          disable-global-transaction: false
        client:
          rm:
            report-success-enable: false

3.注意事项:
在这里插入图片描述

4.seata默认组名为my_test_tx_group,需要更换时,修改config.txt文件即可:

在这里插入图片描述
5.最后在需要做分布式事务控制的代码上加上@GlobalTransactional就大功告成了!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44009447/article/details/113714379