SpringCloud-快速通關(一)
SpringCloud-快速通關(二)
SpringCloud-快速通關(三)
SpringCloud-快速通關(三)
- 七、Seata - 分布式事務
- 7.1、環境搭建
- 7.1.1、簡介
- 7.1.2、環境搭建
- 7.1.3、seata-server
- 7.1.4、微服務配置
- 7.1.5、測試
- 7.2、事務模式
- 7.2.1、AT模式
- 7.2.2、XA模式
- 7.2.3、TCC模式
- 7.2.4、saga模式
- 7.3 小節
七、Seata - 分布式事務
官網:https://seata.apache.org/zh-cn/
seata服務器的web界面的端口是7091,而8091是TC協調者的TCP端口
7.1、環境搭建
7.1.1、簡介
seata
有服務器端和客戶端,客戶端要連上服務器才能使用。- TC(事務協調者)在服務器端:得官網下載: 全局事務的管理者。用于維護全局和分支事務的狀態,驅動TM的全局提交和回滾。TM和RM通過TC注冊分支和匯報狀態。
- TM(事務管理器)在客戶端:發起全局事務,定義全局事務的范圍,操作全局事務的提交和回滾。
- RM(資源管理器)在客戶端:操作自己分支的事務提交和回滾。
- 注意:
seata
的穩定性非常重要,如果TC崩了,那所有的事務管控都失效。
7.1.2、環境搭建
微服務
下載
seata
工程文件,導入到項目中,并在 services 中添加 module 聚合
seata-demo.zip
SQL
在mysql
中執行sql創建庫表
CREATE DATABASE IF NOT EXISTS `storage_db`;
USE `storage_db`;
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (`id` int(11) NOT NULL AUTO_INCREMENT,`commodity_code` varchar(255) DEFAULT NULL,`count` int(11) DEFAULT 0,PRIMARY KEY (`id`),UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO storage_tbl (commodity_code, count) VALUES ('P0001', 100);
INSERT INTO storage_tbl (commodity_code, count) VALUES ('B1234', 10);-- 注意此處0.3.0+ 增加唯一索引 ux_undo_log
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY