SpringCloud Alibaba Seata安裝配置嗎,使用Nacos為配置中心
- 下載安裝
- 概念介紹
- SpringCloud專案整合Seata
- maven依賴 官方推薦依賴方式(默認專案已經使用Nacos)
- 修改server端registry.conf配置(注冊中心和配置中心使用nacos)
- 參考資料
下載安裝
官網下載地址:https://github.com/seata/seata/releases
下載下來解壓即可,目前最新版本為1.4.0(下載服務包和原始碼包)
概念介紹
seata分布式事務解決方案在使用中分為server端和client端,
- server端:就是下載的seata,配置好后直接啟動運行,
- client端:需要業務系統集成seata,
主要組態檔registry.conf,
Server端存盤模式(store.mode)現有file、db、redis三種(后續將引入raft,mongodb),file模式無需改動,直接啟動即可,下面專門講下db和redis啟動步驟,
注: file模式為單機模式,全域事務會話資訊記憶體中讀寫并持久化本地檔案root.data,性能較高;
db模式為高可用模式,全域事務會話資訊通過db共享,相應性能差些;
redis模式Seata-Server 1.3及以上版本支持,性能較高,存在事務資訊丟失風險,請提前配置合適當前場景的redis持久化配置.

注冊中心
- 什么是注冊中心?
注冊中心可以說是微服務架構中的”通訊錄“,它記錄了服務和服務地址的映射關系,在分布式架構中,服務會注冊到這里,當服務需要呼叫其它服務時,就到這里找到服務的地址,進行呼叫.比如Seata Client端(TM,RM),發現Seata Server(TC)集群的地址,彼此通信. - Seata的注冊中心與Dubbo,Spring cloud的注冊中心區別是?
在廣義上來說,并無區別,只不過Dubbo與Spring cloud的注冊中心僅是作用于它們自身的組件,而Seata的注冊中心也是一樣是作用于Seata自身.(注:Dubbo與Spring cloud的注冊中心與Seata無關)
配置中心
- 什么是配置中心?
配置中心可以說是一個"大衣柜",內部放置著各種組態檔,你可以通過自己所需進行獲取配置加載到對應的客戶端.比如Seata Client端(TM,RM),Seata Server(TC),會去讀取全域事務開關,事務會話存盤模式等資訊. - Seata的配置中心與Spring cloud的配置中心區別是?
在廣義上來說,并無區別,只不過Spring cloud的配置中心僅是作用于它們自身的組件,而Seata的配置中心也是一樣是作用于Seata自身.(注:Spring cloud的配置中心與Seata無關)
事務分組
-
事務分組是什么?
事務分組是seata的資源邏輯,類似于服務實體,在file.conf中的my_test_tx_group就是一個事務分組, -
通過事務分組如何找到后端集群?
- 首先程式中配置了事務分組(GlobalTransactionScanner 構造方法的txServiceGroup引數)
- 程式會通過用戶配置的配置中心去尋找service.vgroupMapping .[事務分組配置項],取得配置項的值就是TC集群的名稱
- 拿到集群名稱程式通過一定的前后綴+集群名稱去構造服務名,各配置中心的服務名實作不同
- 拿到服務名去相應的注冊中心去拉取相應服務名的服務串列,獲得后端真實的TC服務串列
- 為什么這么設計,不直接取服務名?
這里多了一層獲取事務分組到映射集群的配置,這樣設計后,事務分組可以作為資源的邏輯隔離單位,出現某集群故障時可以快速failover,只切換對應分組,可以把故障縮減到服務級別,但前提也是你有足夠server集群,
SpringCloud專案整合Seata
maven依賴 官方推薦依賴方式(默認專案已經使用Nacos)
<!-- 集成seata分布式事務 -->
<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>專案中spring-cloud-alibaba的版本</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- seata注冊配置中心 -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.2</version>
</dependency>
修改server端registry.conf配置(注冊中心和配置中心使用nacos)
- 在nacos控制臺中創建一個新的命名空間seata(記住這個ID)

- 配置server端注冊中心和配置中心
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
loadBalance = "RandomLoadBalance"
loadBalanceVirtualNodes = 10
nacos {
application = "seata-server"
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP"
namespace = "naocs中命名空間ID"
cluster = "default"
username = "nacos登錄賬號"
password = "nacos登錄密碼"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = "naocs中命名空間ID"
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
}
上傳配置到至Nacos配置中心,在下載的原始碼包中seata-source-1.4.0\script\config-center檔案夾下,
config.txt是官方配置好的引數,直接使用nacos檔案里面的腳本上傳配置即可,引數介紹
./nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 命名空間ID -u nacos賬號-w nacos密碼
官方教程連接
上傳成功后,就可以在nacos上面看見了

- 配置client端注冊中心和配置中心
在專案的通用配置application.yml中配置(也可以在要使用seata的每個服務里面的application,yml中配置)
# seata配置
seata:
registry:
type: nacos
# 復制的seata config檔案夾里面的registry.conf內容
nacos:
# 和server端中application一致
application: "seata-server"
serverAddr: localhost:8848
group: "SEATA_GROUP"
namespace: "命名空間ID"
cluster: "default"
username: "nacos賬號"
password: "nacos密碼"
config:
type: nacos
nacos:
serverAddr: localhost:8848
group: "SEATA_GROUP"
namespace: "命名空間ID"
username: "nacos賬號"
password: "nacos密碼"
然后在需要使用seata的服務中配置引數(比如有訂單模塊和用戶模塊)
mall-order-dev.yml
# seata事務分組
seata:
tx-service-group: mall-order-seata-group
mall-user-dev.yml
# seata事務分組
seata:
tx-service-group: mall-user-seata-group
然后修改nacos中的配置

- 最后使用
在需要處理分布式事務的類上面添加
@GlobalTransactional(rollbackFor = Exception.class)即可(默認是AT模式)
參考資料
Seata 官網
Seata GitHub地址
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/236561.html
標籤:其他
