Seata是一个开源的分布式事务解决方案,为分布式系统提供强一致性的事务管理服务,支持 Spring Cloud、Dubbo 等主流框架的分布式事务问题。Seata 目前提供了 AT、TCC、SAGA 三种事务模式,并提供了多种高可用方案。
下面我们来学习如何使用 Seata 来实现分布式事务。
1. 下载 Seata
首先,我们需要下载 Seata 最新的版本,可以在 Seata 的 Github 仓库中找到下载链接。
2. 部署 Seata Server
Seata Server 部署相当简单,直接解压缩下载好的 Seata 压缩文件,然后在命令行中进入到解压缩后的目录,启动 Seata 服务端。
./bin/seata-server.sh -p 8091 -h 127.0.0.1 -m file
参数含义:
- -p:指定 Seata Server 监听的端口号。
- -h:指定 Seata Server 监听的 IP 地址。
- -m:指定 Seata Server 使用的存储模式,目前支持 file(文件存储)和 db(数据库存储)两种。如果选择 db 模式,还需要配置数据库连接信息。
Seata Server 启动成功后,可以通过访问 http://127.0.0.1:8091 来查看 Seata Server 的管理页面。
3. 集成 Seata
在需要使用 Seata 的项目中,我们需要添加 Seata 的依赖,具体操作请参考官方文档。
然后,在 Spring Boot 项目中,我们需要使用 @GlobalTransactional 注解来标记需要进行分布式事务管理的方法。
@Service
public class XxxServiceImpl implements XxxService {
@Autowired
private XxxMapper xxxMapper;
@Override
@GlobalTransactional
public void doBusiness() {
// 业务逻辑代码
xxxMapper.updateXxxRecord();
xxxMapper.insertYyyRecord();
}
}
注意:@GlobalTransactional 注解需要添加到外层的业务方法上,同时该方法需要使用 public 修饰。
在 Dubbo 项目中,我们需要使用 @GlobalTransactional 注解来标记 Dubbo 服务方法,同时也需要在 Dubbo 服务方法中添加 @Compensable 注解来标记补偿方法。
@Service(interfaceClass = XxxService.class)
public class XxxServiceImpl implements XxxService {
@Autowired
private XxxMapper xxxMapper;
@Override
@GlobalTransactional
public void doBusiness() {
// 业务逻辑代码
xxxMapper.updateXxxRecord();
xxxMapper.insertYyyRecord();
}
@Override
@Compensable
@Transactional
public void doBusinessCompensable() {
// 补偿逻辑代码
xxxMapper.deleteYyyRecord();
xxxMapper.updateXxxRecord();
}
}
4. 配置 Seata
在 Spring Boot 项目中,我们需要在 application.yml(或 application.properties)文件中添加 Seata 配置信息。
spring:
cloud:
alibaba:
seata:
tx-service-group: my_tx_group
enabled: true
# 配置 Seata 的事务日志存储模式,支持 db 和 file 两种,根据实际情况选择即可。
config:
type: file
file:
store-dir: /seata/storage
在 Dubbo 项目中,我们需要使用 Dubbo 的配置文件(dubbo.properties)来配置 Seata。
spring.cloud.alibaba.seata.tx-service-group=my_tx_group
spring.cloud.alibaba.seata.enabled=true
# 配置 Seata 的事务日志存储模式,支持 db 和 file 两种,根据实际情况选择即可。
spring.cloud.alibaba.seata.config.type=file
spring.cloud.alibaba.seata.config.file.store-dir=/seata/storage
总结
通过以上的介绍,我们已经可以使用 Seata 来实现分布式事务了。Seata 提供了 AT、TCC、SAGA 三种事务模式,可以根据实际情况来选择。同时,Seata 还提供了多种高可用方案,可以满足不同场景的需求。