Seata?環(huán)境搭建部署過(guò)程
在使用微服務(wù)中,單體事務(wù)注解@Transactional
就不適用了,需要采用分布式事務(wù)解決方案,本文介紹分布式事務(wù)Seata
的安裝。Seata
一款開(kāi)源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù)。
seata
版本: 1.5.2
前提準(zhǔn)備
Seata
是一個(gè)分布式事務(wù),seata
服務(wù)端也是一個(gè)微服務(wù)
,需要和其他微服務(wù)一樣需要注冊(cè)中心
和配置中心
。
同時(shí)事務(wù)回滾,需要數(shù)據(jù)庫(kù)日志記錄。
- 注冊(cè)中心和配置中心:
nacos
- 數(shù)據(jù)庫(kù):
mysql
1.下載
進(jìn)入Seata官網(wǎng)下載,下載版本是1.5.2
,找到seata-server-1.5.1.tar.gz
下載。解壓文件后進(jìn)入seata
文件。
2.建表
新建數(shù)據(jù)庫(kù)seata
,然后在seata
文件夾里面的script
文件,找到server
—> db
—> mysql.sql
,在數(shù)據(jù)庫(kù)中執(zhí)行sql
語(yǔ)句:
-- the table to store GlobalSession data CREATE TABLE IF NOT EXISTS `global_table` ( `xid` VARCHAR(128) NOT NULL, `transaction_id` BIGINT, `status` TINYINT NOT NULL, `application_id` VARCHAR(32), `transaction_service_group` VARCHAR(32), `transaction_name` VARCHAR(128), `timeout` INT, `begin_time` BIGINT, `application_data` VARCHAR(2000), `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMARY KEY (`xid`), KEY `idx_status_gmt_modified` (`status` , `gmt_modified`), KEY `idx_transaction_id` (`transaction_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; -- the table to store BranchSession data CREATE TABLE IF NOT EXISTS `branch_table` ( `branch_id` BIGINT NOT NULL, `xid` VARCHAR(128) NOT NULL, `transaction_id` BIGINT, `resource_group_id` VARCHAR(32), `resource_id` VARCHAR(256), `branch_type` VARCHAR(8), `status` TINYINT, `client_id` VARCHAR(64), `application_data` VARCHAR(2000), `gmt_create` DATETIME(6), `gmt_modified` DATETIME(6), PRIMARY KEY (`branch_id`), KEY `idx_xid` (`xid`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; -- the table to store lock data CREATE TABLE IF NOT EXISTS `lock_table` ( `row_key` VARCHAR(128) NOT NULL, `xid` VARCHAR(128), `transaction_id` BIGINT, `branch_id` BIGINT NOT NULL, `resource_id` VARCHAR(256), `table_name` VARCHAR(32), `pk` VARCHAR(36), `status` TINYINT NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking', `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMARY KEY (`row_key`), KEY `idx_status` (`status`), KEY `idx_branch_id` (`branch_id`), KEY `idx_xid_and_branch_id` (`xid` , `branch_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; CREATE TABLE IF NOT EXISTS `distributed_lock` ( `lock_key` CHAR(20) NOT NULL, `lock_value` VARCHAR(20) NOT NULL, `expire` BIGINT, primary key (`lock_key`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
全局事務(wù)會(huì)話由:全局事務(wù)、分支事務(wù)、全局鎖,對(duì)應(yīng)表分別為global_table
、branch_table
、lock_table
。
3.配置 nacos
在nacos
控制臺(tái)添加新的命名空間:
添加一條seata
,命名空間ID
在后面需要用到:
3.1 上傳配置至Nacos配置中心
進(jìn)到seata
目錄中,找到nacos-config.sh
文件,路徑:script
-> config-center
-> nacos
-> nacos-config.sh
。執(zhí)行nacos-config.sh
腳本:
sh nacos-config.sh -h 127.0.0.1 -p 8848 -g SEATA_GROUP -t xxxx -u username -w password
參數(shù)詳解:
- -h
nacos
服務(wù)IP - -p
nacos
服務(wù)端口 - -u
nacos
登錄名 - -w
nacos
登錄密碼 - -g
nacos
配置的分組名稱,默認(rèn)設(shè)置SEATA_GROUP
- -t 上一步配置的
命名空間ID
執(zhí)行腳本之后,輸出以下腳本:
Set server.maxCommitRetryTimeout=-1 successfully Set server.maxRollbackRetryTimeout=-1 successfully Set server.rollbackRetryTimeoutUnlockEnable=false successfully Set server.distributedLockExpireTime=10000 successfully Set server.xaerNotaRetryTimeout=60000 successfully Set server.session.branchAsyncQueueSize=5000 successfully Set server.session.enableBranchAsyncRemove=false successfully Set server.enableParallelRequestHandle=false successfully Set metrics.enabled=false successfully Set metrics.registryType=compact successfully Set metrics.exporterList=prometheus successfully Set metrics.exporterPrometheusPort=9898 successfully
再去nacos
控制臺(tái)查看配置:
說(shuō)明配置上傳成功。上傳不成功,大部分原因是配置沒(méi)有配置成功,比如命名空間ID
沒(méi)配置正確。
4.修改 appplication.yml
找到appplication.yml
文件,路徑為:seata
-> conf
-> application.yml
,以下三個(gè)小節(jié)分別配置store
、config
、registry
:
4.1 seata.store
seata.store
配置seata
的存儲(chǔ),修改store.mode="db"
:
seata: store: # support: file 、 db 、 redis mode: db
修改數(shù)據(jù)庫(kù)連接,將 seata
-> conf
-> application.example.yml
中附帶額外配置,將其db
相關(guān)配置復(fù)制至application.yml
,修改store.db
相關(guān)屬性。數(shù)據(jù)庫(kù)是步驟一
配置的數(shù)據(jù)庫(kù):
seata: store: # support: file 、 db 、 redis mode: db db: datasource: druid db-type: mysql driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://xxxxx:3306/seata?rewriteBatchedStatements=true user: xxxx password: xxx min-conn: 5 max-conn: 100 global-table: global_table branch-table: branch_table lock-table: lock_table distributed-lock-table: distributed_lock query-limit: 100 max-wait: 5000
4.2 seata.config
seata.config
是配置nacos配置中心
相關(guān)的配置。將seata.config.type
修改成nacos
:
seata: config: # support: nacos, consul, apollo, zk, etcd3 type: nacos
然后添加seata.config.nacos
相關(guān)的配置:
seata: config: # support: nacos, consul, apollo, zk, etcd3 type: nacos nacos: server-addr: 127.0.0.1:8848 group : "SEATA_GROUP" namespace: "xxxxx" username: "xxx" password: "xxx"
其中namespace
是步驟3中的命名空間ID
。
4.3 seata.registry
seata.registry
是配置注冊(cè)中心相關(guān)字段,將seata
服務(wù)作為一個(gè)微服務(wù)注冊(cè)到注冊(cè)中心
。將registry.type
改成nacos
,配置如下:
seata: registry: # support: nacos, eureka, redis, zk, consul, etcd3, sofa type: nacos nacos: application: "seata-server" serverAddr: 127.0.0.1:8848 group: "SEATA_GROUP" namespace: "xxxxxx" username: "xxxx" password: "xxx"
namespace
也是步驟3中的命名空間ID
。
啟動(dòng)
找到seata
文件中的bin
目錄,執(zhí)行啟動(dòng)命令:
seata-server.sh -h 127.0.0.1 -p 8091 -m db
控制臺(tái)輸出:
apm-skywalking not enabled
seata-server is starting, you can check the /opt/seata/logs/start.out
打開(kāi)start.out
日志:
系統(tǒng)啟動(dòng)成功,再登錄 http://127.0.0.1:7091,就能看到seata
控制臺(tái)信息。
nacos
控制臺(tái)服務(wù)列表新增了一個(gè)服務(wù),說(shuō)明seata
服務(wù)成功注冊(cè)到了nacos
注冊(cè)中心:
總結(jié)
seata
安裝版本是1.5.2
,版本不同,安裝流程也可能不同,這里的版本需要保持一致- 執(zhí)行
sql
創(chuàng)建數(shù)據(jù)表 - 使用腳本添加配置到
nacos
配置中心 - 修改
application.yml
文件,分別修改store
、config
、registry
相關(guān)配置。 - 啟動(dòng)服務(wù),成功登陸
seata
控制臺(tái)。 - 查看
nacos
控制臺(tái),服務(wù)列表新增seata
服務(wù)。
參考
到此這篇關(guān)于Seata 環(huán)境搭建的文章就介紹到這了,更多相關(guān)Seata 環(huán)境搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
HelloSpringMVC配置版實(shí)現(xiàn)步驟解析
這篇文章主要介紹了HelloSpringMVC配置版實(shí)現(xiàn)步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09SpringBoot AOP控制Redis自動(dòng)緩存和更新的示例
今天小編就為大家分享一篇關(guān)于SpringBoot AOP控制Redis自動(dòng)緩存和更新的示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01JUC系列學(xué)習(xí)工具類CountDownLatch詳解
這篇文章主要介紹了JUC系列學(xué)習(xí)工具類CountDownLatch詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可任意參考一下2022-08-08解決IDEA創(chuàng)建第一個(gè)spring boot項(xiàng)目提示cannot resolve xxx等
這篇文章主要介紹了解決IDEA創(chuàng)建第一個(gè)spring boot項(xiàng)目提示cannot resolve xxx等錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01java網(wǎng)絡(luò)編程學(xué)習(xí)java聊天程序代碼分享
java聊天程序代碼分享,大家參考使用吧2013-12-12java HashMap內(nèi)部實(shí)現(xiàn)原理詳解
這篇文章主要介紹了java HashMap內(nèi)部實(shí)現(xiàn)原理詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02