官方地址

http://seata.io/zh-cn/index.htmlhttp://seata.io/zh-cn/index.html

参考官网即可

使用

1

每个微服务都需要创建 UNDO_LOG 表
SEATA AT 模式需要 UNDO_LOG 表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 注意此处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;

2

下载seata服务器
https://github.com/seata/seata/releaseshttps://github.com/seata/seata/releases,下载服务器软件包,将其解压缩。

3

导入依赖

1
2
3
4
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

4

registry.conf 注册中心配置文件
file.conf Seata配置

nacos中的seata的注册名字是serveraddr

5

每个服务使用seata 代理数据源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.jhj.gulimall.product.config;

import com.zaxxer.hikari.HikariDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

import javax.sql.DataSource;

@Configuration
public class MySeataConfig {

@Autowired
DataSourceProperties dataSourceProperties;

@Bean
public DataSource dataSource(DataSourceProperties dataSourceProperties){

HikariDataSource build = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
if (StringUtils.hasText(dataSourceProperties.getName())){

build.setPoolName(dataSourceProperties.getName());
}
return new DataSourceProxy(build);
}
}

6

每个微服务将 file.conf register.conf放到resource下
修改每一个file.conf的service.vgroup_mapping 修改为service.vgroup_mapping.${spring.application.name}-fescar-service-group
方式一直接修改file.conf
方式二 配置yml

1
2
3
4
5
6
spring:
cloud:
alibaba:
seata:
tx-service-group: ${
spring.application.name}

启动测试

想要做分布式事务的大事务入口方法上加上 @GlobalTransactional 远程调用的小事务 @Transactional

作者声明

1
如有问题,欢迎指正!