上一节成功启动了seata,传送门:
https://blog.csdn.net/qq_16089135/article/details/133989446
中文文档
Seata 是什么
AT:基于支持本地 ACID 事务的关系型数据库。
Java 应用,通过 JDBC 访问数据库。
整体机制:二阶段提交。
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。
TCC:不依赖于底层数据资源的事务支持,支持把 自定义 的分支事务纳入到全局事务的管理中。
SAGA :Saga模式是SEATA提供的长事务解决方案。
在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
seata主要有下面三种角色
事务协调器(TC):维护全局事务和分支事务的状态,驱动全局提交或回滚。
事务管理器(TM):定义全局事务的范围:开始全局事务,提交或回滚全局事务。
资源管理器(RM):管理分支事务处理的资源,与TC交谈以注册分支事务并报告分支事务的状态,并驱动分支事务提交或回滚。
一个分布式事务流程图:
TM要求TC开始新的事务。TC生成一个表示全局事务的XID。
XID是通过微服务的调用链传播的。
RM将本地事务注册为XID到TC的相应全局事务的分支。
TM要求TC提交或回滚XID的相应全局事务。
TC驱动XID对应全局事务下的所有分支事务完成分支提交或回滚。
使用的是seata默认的AT模式,可以通过注解的方式无侵入的方式实现集成,需要额外在三个库创建一张表如下:
Seata AT 模式 需要使用到 undo_log 表。
-- 注意此处0.3.0+ 增加唯一索引 ux_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 KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-seataartifactId>
dependency>
seata:
enabled: true
application-id: ${
spring.application.name}
tx-service-group: my-tx-group
service:
vgroup-mapping:
my-tx-group: seata-server
grouplist:
seata-server: 127.0.0.1:8091
package com.example.server.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.domain.Order;
public interface BusinessMapper extends BaseMapper<Order> {
}
package com.example.server.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.domain.Order;
public interface BusinessService extends IService<Order> {
Order createOrder(Long pid, Long uid);
}
package com.example.server.service.impl;
import com.baomidou.mybatisplus.extension.service.imp