天天看點

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

文章目錄

    • 一。解決的問題
    • 二。Seata簡介
      • 1.Seata 是什麼?
      • 2.三大元件
      • 3.處理過程
      • 4.使用方法
    • 三。seata1.4+nacos+mysql配置
      • 1.seata準備
      • 2.修改file.conf,registry.conf配置檔案内容
      • 3.下載下傳config.txt與nacos-config.sh檔案
      • 4.資料庫檔案
    • 四。啟動Seata
    • 五。項目配置

一。解決的問題

seata

的出現是為了更好的解決分布式事務的問題,相比于之前的單機庫,服務隻操作一個資料庫的時候,用我們大家熟悉的

@Transactional

注解就能做好一些單一事務的控制。但是微服務架構之後,各個服務所調用的資料庫可能不一緻,就造成了一個服務對應多個資料庫或者多個服務對應多個資料庫的情況,就會出現下圖的情況:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

一句話來說,一次業務操作需要跨多個資料源或需要跨多個系統進行遠端調用,就會産生分布式事務問題。

二。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交談以注冊分支事務和報告分支事務的狀态,并驅動分支事務送出或復原。
    SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

3.處理過程

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置
SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

4.使用方法

使用方法很簡單,隻需要在需要做分布式事務控制的業務邏輯代碼上加上

@GlobalTransactional

注解即可。

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

三。seata1.4+nacos+mysql配置

1.seata準備

官方文檔強烈推薦我們使用seata1.4來使用Nacos作為配置中心:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

是以我們選擇下載下傳1.4版本,下載下傳位址如下:https://github.com/seata/seata/releases

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

下載下傳完成後,檔案夾内容如下:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

2.修改file.conf,registry.conf配置檔案内容

(注意:修改之前記得先進行備份操作)

打開conf檔案夾:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

修改

file.conf

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

修改

registry.conf

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

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:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

拿到seata的命名空間id:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

打開nacos-config.sh的存放路徑,右鍵打開GitBash指令行:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

輸入指令行,将這些配置導入到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注冊和配置認證的才需要指定。
    SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

導入成功的标志:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

nacos中可以看見相關配置:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

config.txt操作流程

修改config.txt配置檔案内容:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

将其放在config同級目錄下:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

4.資料庫檔案

1.4版本mysql資料庫語句:https://github.com/seata/seata/blob/1.4.0/script/server/db/mysql.sql

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

全部導入資料庫後,seata資料庫如下所示:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

四。啟動Seata

1.首先啟動nacos,保證nacos運作正常:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

2.點選

bin

目錄下的

seata-server.bat

檔案,啟動seata:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

3.啟動成功:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

4.打開nacos,可以找到seata注冊的服務:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

(注:注冊服務預設分組為

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.注意事項:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

4.seata預設組名為

my_test_tx_group

,需要更換時,修改

config.txt

檔案即可:

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

5.最後在需要做分布式事務控制的代碼上加上

@GlobalTransactional

就大功告成了!

SpringCloud Alibaba微服務中seata1.4+nacos+mysql實作分布式事務的配置

繼續閱讀