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