美文网首页
spring cloud alibaba 分布式事务解决方案之s

spring cloud alibaba 分布式事务解决方案之s

作者: 小明同学777 | 来源:发表于2020-10-27 14:10 被阅读0次

1.github上下载seata-1.3.0.zip包

链接:https://github.com/seata/seata/releases/download/v1.3.0/seata-server-1.3.0.zip

2.打开seata压缩包,找到conf文件夹下的registry.conf修改注册方式和配置方式为nacos,如下:

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

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

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

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

3.GitHub下载seata源码,链接:https://github.com/seata/seata/tree/v1.3.0

解压后找到script文件夹下的config-center,修改该文件夹下的config.txt文件。
config.txt文件内容都是键值对,后面要通过脚本把该文件中的配置导入到nacos中。修改的键值对项如下:

#用来配置分布式事务集群名称
service.vgroupMapping.tianxia_article_tx_group=default
service.vgroupMapping.tianxia_member_tx_group=default
#存储方式改成数据库
store.mode=db
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true
store.db.user=username
store.db.password=password

修改后执行nacos文件夹下的nacos-config.sh 脚本导入配置到nacos
导入成功后如图所示:


image.png

返回到script文件夹,进入到client目录下的spring文件夹内,复制application.yml文件内的配置到自己的项目内,修改如下配置:

seata:
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: ${spring.application.name}_tx_group
  service:
 #   vgroup-mapping:
 #     my_test_tx_group: default
  config:
    type: nacos
    nacos:
      namespace:
      serverAddr: 127.0.0.1:8848
      group: SEATA_GROUP
      username: "nacos"
      password: "nacos"
  registry:
    type: nacos
    nacos:
      application: tianxia-seata-server
      server-addr: 127.0.0.1:8848
      group : "SEATA_GROUP"
      namespace:
      username: "nacos"
      password: "nacos"

到此可以启动seata服务端了。
启动成功可以再nacos看到注册的seata服务,如下:


image.png

4.上一步项目中已经加入了seata的application.yml配置,还没有加入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>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>${seata.version}</version>
        </dependency>

5.编写业务代码

在方法的入口处加上注解@GlobalTransactional

    @GlobalTransactional
    @Override
    public boolean saveArticle() {
        GcArticle build = GcArticle.builder().content("asdadad").title("asdadsdf").viewCount(1).build();
        boolean save1 = this.save(build);
        String save = iRemoteUserService.save();
        if(true){
            throw new BusinessException("asda");
        }
        return true;
    }

被调用的远程方法加上spring事务注解 @Transactional
事务id可以通过RootContext.getXID();获取到

    @Transactional
    @Override
    public boolean saveMember() {
        String xid = RootContext.getXID();
        log.info("xid:{}",xid);
        GcMember member = GcMember.builder().age(22).nickname("hhy").phone("15857193035").build();
        boolean save = this.save(member);
        return save;
    }

6.到此可以启动项目进行测试了

祝大家一遍过~~

相关文章

网友评论

      本文标题:spring cloud alibaba 分布式事务解决方案之s

      本文链接:https://www.haomeiwen.com/subject/yyztvktx.html