項目依賴
- SpringBoot 2.5.5
- SpringCloud 2020.0.4
- Alibaba Spring Cloud 2021.1
- Mybatis Plus 3.4.0
- Seata 1.4.1(需要與服務器部署的Seata版本保持一致)
- 。。。。
- 一個開源分布式事務框架 , 由阿里中間件團隊發(fā)起的開源項目Fescar , 后更名為Seata
- 中文文檔地址:http://seata.io/zh-cn/docs/user/quickstart.html
- TC:Transaction Coordinator事務協(xié)調器 , 管理全局的分支事務的狀態(tài) , 用于全局性事務的提交和回滾
- TM:Transaction Manager 事務管理器 , 用戶開啟、提交或者回滾【全局事務】
- RM:Resource Manager資源管理器 , 用于分支事務上的資源管理 , 向TC注冊分支事務 , 上報分支事務的狀態(tài) , 接收TC的命令來提交或者回滾分支事務
- 傳統(tǒng)XA協(xié)議實現(xiàn)2PC方案的RM是在數(shù)據(jù)庫層 , RM本質上就是數(shù)據(jù)庫自身
- Seata的RM是以jar包的形式嵌入在應用程序里面

文章插圖
XID
- TM請求TC開啟一個全局事務 , TC會生成一個XID作為該全局事務的編號XID , XID會在微服務的調用鏈路中傳播 , 保證將多個微服務對的子事務關聯(lián)在一起

文章插圖
注:我這邊下載的是1.4.1 , seata部署版本需要與SpringBoot依賴的版本相對應!!!!!!
Seata部署前期準備準備好Nacos、mysql
注:nacos配置中心數(shù)據(jù)是持久化到mysql的!!!!
部署&修改配置修改存儲模式DB上傳至服務器 , 目錄為:/usr/local/software
# 1、創(chuàng)建目錄mkdir -p /usr/local/software# 2、解壓unzip seata-server-1.4.1.zip# 3、修改存儲模式 DBcd seata/conf/vi file.conf

文章插圖
注:修改為自己的mysql!!!!
## transaction log store, only used in seata-serverstore {## store mode: file、db、redismode = "file"## database store propertydb {## 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://47.116.143.16:3306/seata?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"user = "root"password = "root"minConn = 5maxConn = 100globalTable = "global_table"branchTable = "branch_table"lockTable = "lock_table"queryLimit = 100maxWait = 5000}}將seata需要的3張表導入數(shù)據(jù)庫中 , 分別是:global_table、branch_table、lock_table
官網(wǎng)地址:http://seata.io/zh-cn/docs/user/quickstart.html
github地址:https://github.com/seata/seata/blob/develop/script/server/db/mysql.sql

文章插圖

文章插圖

文章插圖
-- -------------------------------- The script used when storeMode is 'db' ---------------------------------- the table to store GlobalSession dataCREATE TABLE IF NOT EXISTS `global_table`(`xid`VARCHAR(128) NOT NULL,`transaction_id`BIGINT,`status`TINYINTNOT 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 = InnoDBDEFAULT CHARSET = utf8mb4;-- the table to store BranchSession dataCREATE TABLE IF NOT EXISTS `branch_table`(`branch_id`BIGINTNOT 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 = InnoDBDEFAULT CHARSET = utf8mb4;-- the table to store lock dataCREATE TABLE IF NOT EXISTS `lock_table`(`row_key`VARCHAR(128) NOT NULL,`xid`VARCHAR(128),`transaction_id` BIGINT,`branch_id`BIGINTNOT NULL,`resource_id`VARCHAR(256),`table_name`VARCHAR(32),`pk`VARCHAR(36),`status`TINYINTNOT 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` (`xid`)) ENGINE = InnoDBDEFAULT 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 = InnoDBDEFAULT 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);
經(jīng)驗總結擴展閱讀
- MassTransit | .NET 分布式應用框架
- 之四 2流高手速成記:SpringBoot整合redis及mongodb
- SpringBoot整合ES+Kibana
- 云原生分布式 PostgreSQL+Citus 集群在 Sentry 后端的實踐
- 微服務系列之分布式日志 ELK
- Dubbo2.7詳解
- 四 SpringBoot - 整合Mybatis,逆向工程,JPA
- 擼了一個簡易的配置中心,順帶整合到了SpringCloud
- 女寶寶優(yōu)雅名字合集 易記女孩取名整合匯總
- 【Spring boot】整合tomcat底層原理
