在所有微服务工程中,不一定所有工程都需要使用分布式事务 ,指定微服务需要支持分布式事务的时候,直接依赖独立的分布式工程即可。
seata核心在于对业务sql进行解析,转换成undolog,所以只要支持seata分布式事务的微服务数据都需要导入该表结构,我们在每个微服务的数据库中都导入下面表结构(来自官方配置):
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 NOT NULL,
`log_modified` datetime 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 = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;1、引入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>2、引入配置:
将以下链接下载的所有配置文件拷贝到工程resources下解压:
有道云笔记
https://note.youdao.com/s/IQ2ve0DJ其中file.conf有2个配置:

service.vgroup_mapping.my_test_tx_group 映射到相应的 seata-Server 集群名称,然后再根据集群名称.grouplist 获取到可用服务列表。
3、在需要用到分布式事务的配置文件中加入以下配置(application.yml):
spring:
cloud:
alibaba:
seata:
tx-service-group: my_test_tx_group4、在需要分布式事务控制的方法上加上注解@GlobalTransactional(name = "submitOrder")
调用的其他微服务方法也需要使用注解指定相同的name。
允许bean定义覆盖,否则有重复bean定义会报错(application.yml):
spring:
main:
allow-bean-definition-overriding: true5、windows使用seata:
下载解压seata-server-1.1.0.zip文件包,并点击seata\bin\seata-server.bat启动Seata的事务协调器。
版权声明:本文为RenFeng_5305原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。