第六章:XA 模式¶
XA 模式原理¶
工作流程¶
XA 模式工作流程:
一阶段:
1. TM 开启全局事务
2. RM 注册分支事务
3. RM 执行 SQL(不提交)
4. RM 返回执行结果
二阶段(提交):
1. TC 通知 RM 提交
2. RM 提交本地事务
二阶段(回滚):
1. TC 通知 RM 回滚
2. RM 回滚本地事务
XA 协议¶
使用 XA 模式¶
配置¶
数据源配置¶
import io.seata.rm.datasource.xa.DataSourceProxyXA;
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return new DruidDataSource();
}
@Bean
public DataSourceProxyXA dataSourceProxyXA(DataSource dataSource) {
return new DataSourceProxyXA(dataSource);
}
}
使用示例¶
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private AccountService accountService;
@GlobalTransactional(name = "create-order")
public void createOrder(Order order) {
// 创建订单
orderMapper.insert(order);
// 扣减余额
accountService.decreaseBalance(order.getUserId(), order.getAmount());
}
}
XA vs AT¶
| 特性 | XA 模式 | AT 模式 |
|---|---|---|
| 一致性 | 强一致 | 最终一致 |
| 性能 | 较低 | 较高 |
| 侵入性 | 无 | 无 |
| 数据库支持 | 需要 XA 支持 | 任意数据库 |
| 全局锁 | 不需要 | 需要 |
适用场景¶
注意事项¶
1. 数据库支持¶
2. 性能影响¶
3. 超时设置¶
小结¶
XA 模式要点:
- 原理:XA 协议、两阶段提交
- 使用:配置、数据源配置、使用示例
- 对比:XA vs AT
- 适用场景:传统数据库、强一致性
- 注意事项:数据库支持、性能影响、超时设置
下一章我们将学习集群部署。