spring cloud alibaba 分布式事務(wù)解決方案之seata-1.3.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文件內(nèi)容都是鍵值對,后面要通過腳本把該文件中的配置導(dǎo)入到nacos中。修改的鍵值對項如下:

#用來配置分布式事務(wù)集群名稱
service.vgroupMapping.tianxia_article_tx_group=default
service.vgroupMapping.tianxia_member_tx_group=default
#存儲方式改成數(shù)據(jù)庫
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

修改后執(zhí)行nacos文件夾下的nacos-config.sh 腳本導(dǎo)入配置到nacos
導(dǎo)入成功后如圖所示:


image.png

返回到script文件夾,進(jìn)入到client目錄下的spring文件夾內(nèi),復(fù)制application.yml文件內(nèi)的配置到自己的項目內(nèi),修改如下配置:

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服務(wù)端了。
啟動成功可以再nacos看到注冊的seata服務(wù),如下:


image.png

4.上一步項目中已經(jīng)加入了seata的application.yml配置,還沒有加入seata依賴:

        <!--分布式事務(wù)-->
        <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.編寫業(yè)務(wù)代碼

在方法的入口處加上注解@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;
    }

被調(diào)用的遠(yuǎn)程方法加上spring事務(wù)注解 @Transactional
事務(wù)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.到此可以啟動項目進(jìn)行測試了

祝大家一遍過~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容