SpringCloudAlibaba-19-seata分布式事务解决方案AT

前言

参考:https://www.jianshu.com/p/940e2cfab67e
quickstart:https://seata.io/zh-cn/docs/user/quickstart.html

内容

1.seata简介

Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

TM:transaction manager
RM:resource manager

1)TM:事务的发起者。用来告诉 TC,全局事务的开始,提交,回滚。
2)RM:具体的事务资源,每一个 RM 都会作为一个分支事务注册在 TC。
3)TC 事务的协调者。也可以看做是 Fescar-server,用于接收我们的事务的注册,提交和回滚。

2.实战

2.1 准备
  1. 1.我们从github上下载seata应用jar包
  1. 2.在本地数据源数据库中添加seata的undo_log日志(在alibaba-order,alibaba-pay库里面)
1
2
3
4
5
6
7
8
9
10
11
12
13
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;
  1. 3.需要使用tc,则需要启动,点击:seata-server.bat
2.2 工程集成
  1. 1.引入依赖(3个服务都添加)
<dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
       <version>2.1.1.RELEASE</version>
   </dependency>
  1. 2.所有的资源服务中加入register,conf,因为服务端,客户端都需要注册,以及客户端配置;存放到resources目录下

  2. 3.我们是在biz-service上开启一个全局的事物来管理:pay-service和order-service;所以需要在biz-service的对应业务层加一个全局的事务注解: @GlobalTransactional(在最早的服务上加这个注解就可以了)

  3. 4.pay/order服务里面的jdbc是spring自己的数据源,这个时候,其实还没有完,我们需要使用seata来代理各个服务的数据源

  4. 5.启动biz-service时候报错,

    我们需要在file里面配置group,规则:appliactionname-seata-service-group

  5. 6.测试访问biz-service
    我们重启:biz-service,然后访问:http://127.0.0.1:8010/biz
    此时pay/order服务已经没有插入了数据

毕业于<br>相信技术可以改变人与人之间的生活<br>码农一枚