1:简介
2.搭建seata-server服务端
2.1 下载
我本人选用版本是1.4.2,因为1.5.X以后需要搭配skywaking,作为入门,就选择简单点的
下载地址:Releases · seata/seata (github.com)
2.2配置seata-sever
修改conf文件夹下面的两个文件配置 file.conf registry.conf
修改mode="db" 下面是对应的数据库配置,需要再本地新建一个seata库,并执行以下sql,sql地址:
seata/mysql.sql at 1.4.2 · seata/seata · GitHub
配置好以后就可以去bin目录下面双击bat启动了,Linux就运行.sh后缀的启动
3.配置AT模式 的TM 客户端 因为TM是业务发起端,里面调用了A B C多个服务
3.1引入pom
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <version>2.2.3.RELEASE</version> </dependency>
注意:引入pom以后 这个jar版本要跟seata-server一致
如果不一致可以采用 排除自带的seata-all再单独引入
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <version>2.2.3.RELEASE</version> <exclusions> <exclusion> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> </exclusion> <exclusion> <groupId>io.seata</groupId> <artifactId>seata-all</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency>
3.2配置application.yml
seata: tx-service-group: my_test_tx_group # 一定用这个默认的 enabled: true registry: type: nacos nacos: application: seata-server #注册在nacos服务名 server-addr: 120.79.153.165:8848 group : dev namespace: "11c50b6d-cc03-47ad-b1ec-f539f5facedf" #注册在nacos命名空间 username: nacos password: nacos
如果报错 can not get cluster name in registry config 'service.vgroupMapping.yomall-product-seata-service-group', please make sure registry config correct 就是没有做配置
然后在TM 所连接的数据库上新建表undo_log,用于TM回滚的,如果A B C服务在TM不是同一个库,也需要分别都新建表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;
4.业务代码使用
在需要做全局事务回滚的代码加上注解
@GlobalTransactional
5.配置AT模式 的RM 客户端 ,就是步骤 3 TM调用的对应服务
步骤跟3一致 ,只是不需要加上
@GlobalTransactional注解
6.seata大概实现原理: 通过aop代理 ,代理dataSource对象 在执行sql前写入对应的undo_log日志,当反生异常的时候执行对应的事务执行回滚信息 。