文章目錄
-
- 一。解決的問題
- 二。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
注解就能做好一些單一事務的控制。但是微服務架構之後,各個服務所調用的資料庫可能不一緻,就造成了一個服務對應多個資料庫或者多個服務對應多個資料庫的情況,就會出現下圖的情況:
一句話來說,一次業務操作需要跨多個資料源或需要跨多個系統進行遠端調用,就會産生分布式事務問題。
二。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)
-
- 資料總管管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀态,并驅動分支事務送出或復原。RM (Resource Manager)
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
指令解析:
-
指定nacos的端口位址;-h -p
-
指定配置的分組,注意,是配置的分組;-g
-
指定命名空間id;-t
-
指定nacos的使用者名和密碼,同樣,這裡開啟了nacos注冊和配置認證的才需要指定。-u -w
導入成功的标志:
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
就大功告成了!