seata使用

在所有微服务工程中,不一定所有工程都需要使用分布式事务 ,指定微服务需要支持分布式事务的时候,直接依赖独立的分布式工程即可。

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下解压:

有道云笔记icon-default.png?t=LA92https://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_group

 4、在需要分布式事务控制的方法上加上注解@GlobalTransactional(name = "submitOrder")

调用的其他微服务方法也需要使用注解指定相同的name。

允许bean定义覆盖,否则有重复bean定义会报错(application.yml):

spring:  
  main:
    allow-bean-definition-overriding: true

5、windows使用seata:

下载解压seata-server-1.1.0.zip文件包,并点击seata\bin\seata-server.bat启动Seata的事务协调器。

有道云笔记icon-default.png?t=LA92https://note.youdao.com/s/CBWd9rav


版权声明:本文为RenFeng_5305原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。