zoukankan      html  css  js  c++  java
  • 分布式事务seata之小试牛刀

    简介:基于seata的AT模式在电商业务场景(下单,远程扣库存)下保证数据强一致性,该介绍包括以下内容:seata服务的搭建。

    1.环境准备

       centos7

       seata  1.4.0

       spring-boot 版本2.2.2.RELEASE

       springcloud alibaba 版本 2.2.3.RELEASE

       springcloud 版本 Hoxton.SR1 

       nacos版本 根据springcloud alibaba

    2.seata的安装与集成

      seata分为服务端与客户端。

      seata保证分布式事务时有TC、TM、RM三个角色;

      TC(事务控制器:属于seata服务侧,用于统一管理分布式的中的多个分支事务

      TM (事务管理器):分布式事务的发起方,可以理解成标注了@GlobalTransaction注解的服务

      RM (分支事务管理器):其他分支事务

     *需要的文件 :从以下链接:https://pan.baidu.com/s/1iFyPPZZQ8Cc_LwLdG_Ze3Q   提取码:02hg

      2.1、在seata下载seata安装包,解压后分为以下文件,阿里系的分布式事务组件都封装成了一个独立的应用(比如nacos、sentinal)

      

    2.2、因为seata服务侧启动后需要注册到naco,配置也需要从nacos上获取,所以需要先将seata的配置导入到nacos配置中心(导入前先在nacos上先建立seata-server的命令控件,用于独立存放seata的的配置)

       导入方法:

       说明:

       下载的文件中  nacos-config.sh 是导入脚本,  nacos-config.txt 是需要的导入的配置项

       因为我是同时下载了seata的win 和 centos版本,所以导入配置是在windows上的导入的,但是seata服务是使用的seata-server-1.4.0.tar.gz运行在centos上

       如果需要在centos上导入应该只需要在conf目录下执行nacos-config.sh就可以了(原因:因为nacos-config.sh原理就是模拟POST请求,调用nacos的新增配置的接口,但是要注意的是nacos-config.txt的配置文件要放在和conf同级目录

       windows下的文件目录结构如下:  

         

       windows在git客户端执行以下命令

    sh nacos-config.sh -h **.**.**.**  -p 8848 -g SEATA_GROUP -t ef28588f-643e-4466-a0ef-89b47f9e8572 -u nacos -w nacos

      -h  nacos 服务的ip

      -p  nacos的端口

      -t  新建的命名控件seata-server

      -u -w nacos的用户名和密码

      导入成功后的配置如下:

       

     修改nacos配置和seata注册文件配置:

       

     修改registry.conf

     创建seata服务需要的数据库和表

     运行下载文件中的seata-server.sql文件创建global_table,branch_table,lock_table三张数据库表

     启动seata服务:

    nohup sh seata-server.sh -p 8091 -h 服务ip &> seata.log &
    

     至此,seata服务端的配置就完成了,seata服务也可以启动了,接下来是seata的客户端配置。  

     2.3 seata客户端的配置

     默认spring-cloud-starter-alibaba-seata的seata服务版本是0.9, 因为我们安装的seata服务是1.4.0版本,客户端和服务端保持一致(所以要自定义引入seata的版本为1.4.0)

     

      pom文件:

            <!--  引入seata配置      -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>io.seata</groupId>
                        <artifactId>seata-spring-boot-starter</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--    自定义seata配置    -->
            <dependency>
                <groupId>io.seata</groupId>
                <artifactId>seata-spring-boot-starter</artifactId>
            </dependency>
    

     yaml文件配置:引入1.0.0以上版本的原因是,在1.0.0以上版本seata客户端可以用过yaml文件配置,不用引入registry.conf和file.conf文件,项目看起来优雅点

       

     yaml文件的配置代码:

    seata:
      registry:
        nacos:
          application: seata-server
          server-addr: #:8060
          group: SEATA_GROUP
    
      config:
        nacos:
          namespace: ef28588f-643e-4466-a0ef-89b47f9e8572
          server-addr: #:8060
          group: SEATA_GROUP
    
      service:
        vgroup-mapping:
          order-tx-group: default
        disable-global-transaction: false
        grouplist:
          default: #:8091
    #  enable-auto-data-source-proxy: true
      enabled: false
      tx-service-group: order-tx-group
      enableAutoDataSourceProxy: true
    #  use-jdk-proxy: true

    注意:seata的AT模式是一种事务的自动补偿机制,通过代理数据源,拦截执行的sql实现

    如果代理数据源的配置短横线的方式(enable-auto-data-source-proxy:true)会出现分支事务注册不成功的现象,最好是使用这样配置:enableAutoDataSourceProxy: true

    最后,在TM事务上标上@GlobalTransaction注解分布式事务就完成了。

       

  • 相关阅读:
    Spring AOP日志实现(一)
    ArrayList和LinkedList的区别
    webmagic保存数据
    Java静态代码块、构造代码块执行顺序问题
    为Spring Cloud Ribbon配置请求重试(Camden.SR2+)
    centos关机与重启命令
    解决win环境下访问本机虚拟机中centos7 ftp服务器的问题
    【MongoDB异常】Exception authenticating MongoCredential解决方法
    mongodb解决只能本地连接不能远程连接问题
    Windows Server 2008 R2提示api-ms-win-crt-runtime-l1-1-0.dll 丢失解决方法
  • 原文地址:https://www.cnblogs.com/HubuSugar/p/14876139.html
Copyright © 2011-2022 走看看