只需要简单的几步配置就可以使用,让我们开始:
前情:seate版本会与openfeign及springboot版本发生冲突,这里使用的版本如下:
springboot2.2.1-openfeign2.2.0-amqp2.0.0? ?如果是高版本的请自行尝试是否可用一下方案
(如果是其他的版本可以存在环境问题)(使用seata-all0.7.1)在每隔模块都要导入这个pom依赖
<!-- 导入seata模块-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
Seata的AT模式控制分布式事务:
1. 每一个微服务对应的数据库都必须先创建一个undo_log表
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`context` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime(0) NOT NULL,
`log_modified` datetime(0) NOT NULL,
`ext` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
2. 安装全局事务协调器:seata-server-0.7.0:(seata的服务器),这个压缩包可以在百度搜索下载:然后只需要改registry配置文件的注册位置其他的无需修改
解压并启动seata-server-0.7.0
* registry.conf:注册中心配置,修改registry type = nacos
* file.conf:本地配置中心(无需修改)
3.此时就可以在nacos上看到全局事务协调器:
4.在业务层方法上加全局事务注解如下,注意:每个涉及到的分支事务只需要加上@Transactional事务注解:
@GlobalTransactional//加上全局事务
@Transactional//加上事务管控
5.所有要使用到分布式事务的微服务使用seata DataSourceProxy代理自己的数据源:
@Configuration
public class DataSourceProxyConfig {
@Autowired
DataSourceProperties dataSourceProperties;
@Bean
public DataSource druidDataSource(DataSourceProperties dataSourceProperties) {
//通过数据源配置类中的初始化数据源构建方法,尝试获得一个hikari数据源,然后给这个数据源一个名字
HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
/**
* 这个配置通过在配置文件中配置数据源名字name获得
* spring:
* datasource:
* name: datasource
*/
if (StringUtils.hasText(dataSourceProperties.getName())){
dataSource.setPoolName(dataSourceProperties.getName());
}
//使用seata代理的数据源
return new DataSourceProxy(dataSource);
}
}
6.每个微服务,都必须导入seata-server-0.7.0事务协调器文件夹中registry.conf,file.conf这两个文件到resources中
7.完成以上步骤就可以启动服务测试了,我这里已经成功
|