微服務整合Spring Cloud Alibaba Seata(一)Seata服務搭建

sowler發表於2024-04-01

1、Seata介紹

Seata是阿里開源的一款分散式事務解決方案,致力於提供高效能和簡單易用的分散式事務服務。資料庫事務我們都知道,事務都是遵循ACID原則。而透過使用Seata可以實現在兩個服務模組透過RPC呼叫時觸發事務,如果有異常會實現業務資料回滾,保證資料的一致性。

官網地址:https://seata.io/zh-cn/

GitHub地址:https://github.com/seata/seata

由於在北京時間2023年10月29日,該分散式事務開源專案 Seata 正式透過 Apache 基金會的投票決議,以全票透過的優秀表現正式成為 Apache 孵化器專案!詳細資訊可檢視:https://developer.aliyun.com/article/1379627 ,所以現在官網最新地址為:

最新官網地址:
https://seata.apache.org/zh-cn/
https://seata.apache.org/zh-cn/docs/overview/what-is-seata

GitHub地址:
https://github.com/apache/incubator-seata

Apache孵化器地址:
https://incubator.apache.org/clutch/seata.html

2、Seata下載1.3.0

根據使用的Spring Cloud Alibaba版本下載推薦的Seata版本

https://github.com/apache/incubator-seata/releases

3、Seata服務配置

3.1、修改配置檔案儲存模式為使用DB高可用模式

Seata預設使用 file 模式,使用file模式啟動完成可以看到持久化的本地檔案root.data,除了file模式外還支援DB、redis, Seata的高可用依賴於註冊中心、配置中心和資料庫來實現。所以這裡我們配置為DB模式。首先下載對應版本的Mysql資料庫:https://github.com/apache/incubator-seata/blob/v1.3.0/script/server/db/mysql.sql 下載成功後,把資料庫表資訊匯入MySQL資料庫。匯入成功後會生成3張表:

進入seata目錄修改seata/conf下面的file.conf檔案store.mode屬性為db,如果沒有file.conf檔案,把file.conf.example檔案複製一份進行重新命名。

配置成功後。檔案下面有個db屬性,在db屬性裡面配置資料庫連線資訊:

db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.cj.jdbc.Driver"
    url = "jdbc:mysql://127.0.0.1:3306/seata"
    user = "root"
    password = "1234qwer"
    minConn = 5
    maxConn = 30
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }

3.2、修改seata配置中心和註冊中心實現高可用

進入seata目錄的seata/conf裡面,先將registry.conf檔案複製一份registry.conf.init以防萬一改錯了,接下來編輯registry.conf。首先把註冊中心改為nacos。設定registry屬性型別為nacos,然後在nacos屬性中配置nacos連線資訊

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

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = "233b70c2-d6a8-482b-8a8d-e000b7a5c3a2"
    cluster = "default"
    username = "nacos"
    password = "1234qwer"
  }

在將配置中心也設定為nacos,config屬性型別為nacos

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

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = "233b70c2-d6a8-482b-8a8d-e000b7a5c3a2"
    group = "SEATA_GROUP"
    username = "nacos"
    password = "1234qwer"
  }
}

部署文件:
https://seata.io/zh-cn/docs/v1.3/ops/deploy-guide-beginner
https://seata.apache.org/zh-cn/docs/v1.3/ops/deploy-guide-beginner/
Seata高可用部署:
https://seata.io/zh-cn/docs/v1.3/ops/deploy-ha
https://seata.apache.org/zh-cn/docs/v1.3/ops/deploy-ha/

4、上傳配置檔案到nacos

4.1 建立config.txt

在seata目錄裡面建立一個config.txt檔案在改檔案中新增配置資訊,配置資訊可以參考 https://github.com/apache/incubator-seata/blob/v1.3.0/script/config-center/config.txt 也可以直接下載改檔案。主要修改下面的資訊:


//my_test_tx_group是可以自定義的修改成功後後面客戶端整合要與伺服器端一致,也可以不修改。
service.vgroupMapping.my_test_tx_group=default  

//把file改為db
store.mode= db 

//修改資料庫連線資訊
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true
store.db.user=root
store.db.password=1234qwer

4.2 建立nacos-config.sh

在seata目錄裡面建立一個nacos-config.sh啟動指令碼檔案,新增檔案內容可以參考 https://github.com/apache/incubator-seata/blob/v1.3.0/script/config-center/nacos/nacos-config.sh 也可以直接下載。修改nacos連線資訊

if [[ -z ${host} ]]; then
    host=127.0.0.1
fi
if [[ -z ${port} ]]; then
    port=8848
fi
if [[ -z ${group} ]]; then
    group="SEATA_GROUP"
fi
if [[ -z ${tenant} ]]; then
    tenant="96a4551b-b576-4047-88e9-c17ed48342ae"
fi
if [[ -z ${username} ]]; then
    username="nacos"
fi
if [[ -z ${password} ]]; then
    password="1234qwer"
fi

host: nacos連線地址
port: nacos連線埠號
group:分組
tenant:名稱空間namespace
username:使用者名稱
password:密碼
修改成功後執行該指令碼,把config.txt檔案內容匯入nacos。

輸出以上內容,說明指令碼執行成功。檢視nacos配置中心:

配置已經成功匯入到nacos

5、啟動Seata

啟動命令進入seata/bin檔案路徑下執行 seata-server.sh 指令碼啟動。

./seata-server.sh > /dev/null 2>&1 &

使用 ps -ef|grep seata 目錄檢視是否啟動成功。

檢視nacos註冊中心,看看服務是否存在。


發現該服務在註冊中心已經註冊成功了,說明seata服務搭建成功。客戶端連線埠號為:IP:8091

相關文章