Seata AT模式 #
一、AT模式概述 #
1.1 什么是AT模式 #
AT模式是Seata提供的无侵入式分布式事务解决方案,通过自动补偿实现事务回滚。
text
┌─────────────────────────────────────────────────────────────┐
│ AT模式架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ TM (事务管理器) │ │
│ │ Transaction Manager │ │
│ └───────────────────────────┬─────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┼─────────────────────────┐ │
│ │ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ RM (资源管理)│ │ RM (资源管理)│ │ RM (资源管理)│ │ │
│ │ │ 数据库A │ │ 数据库B │ │ 数据库C │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
1.2 AT模式原理 #
text
一阶段:
1. 解析SQL,记录前镜像
2. 执行业务SQL
3. 记录后镜像
4. 生成Undo Log
二阶段-提交:
异步删除Undo Log
二阶段-回滚:
根据Undo Log反向生成SQL恢复数据
二、环境搭建 #
2.1 部署Seata Server #
bash
docker run -d --name seata-server -p 8091:8091 seataio/seata-server:latest
2.2 添加依赖 #
xml
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.7.0</version>
</dependency>
2.3 配置文件 #
yaml
seata:
enabled: true
application-id: user-service
tx-service-group: my_tx_group
service:
vgroup-mapping:
my_tx_group: default
registry:
type: nacos
nacos:
server-addr: localhost:8848
三、使用方式 #
3.1 数据库表 #
sql
CREATE TABLE `undo_log` (
`id` bigint NOT NULL AUTO_INCREMENT,
`branch_id` bigint NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
);
3.2 开启事务 #
java
@Service
public class OrderService {
@GlobalTransactional
public void createOrder(Order order) {
orderMapper.insert(order);
inventoryService.deduct(order.getProductId(), order.getQuantity());
accountService.debit(order.getUserId(), order.getAmount());
}
}
四、总结 #
| 要点 | 说明 |
|---|---|
| 无侵入 | 无需修改业务代码 |
| 自动补偿 | 自动生成回滚SQL |
| Undo Log | 记录数据变更 |
接下来让我们学习 Seata TCC模式!
最后更新:2026-03-28