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