seata基本使用
使用seata之前需要先了解一下seata的一些名词和关系:
TC:事务协调者 用于开启一个全局和分支事务
TM:事务管理者 定义事务的范围,在事务开始的时候向TC请求开启一个全局事务
RM:资源管理器 管理事务的状态,与TC做交流,通知TC是提交事务还是回滚事务
业务开始的时候:TC作为一个独立的服务,管理着全局和分支事务,TM定义事务范围并向TC请求开启一个全局的事务,RM监控所有的分支事务,当所有的分支事务成功,则通知TC进行提交事务,如果有一个事务失败,那么TC会执行逆向sql用于回滚事务
使用之前需要先导入仪依赖
<!--seata 分布式事务--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> </dependency>
然后在配置文件中配置
seata: tx-service-group: train_group # 事务服务组名称 service: vgroup-mapping: # 事务分组与服务组的映射关系 train_group: default # 将 train_group 映射到 default 服务组 grouplist: # 服务组的地址列表 default: localhost:8091 # default 服务组的地址
在相关联的数据库添加一下逆向表用于存放seata的逆向sql用于回滚
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 KEY (`id`), UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
在事务的初始链,事务刚开始的地方添加注解
@GlobalTransactional