本文主要是介绍seata服务1.3.0版本搭建(你说你讨厌母亲的市侩圆滑,却不知她也曾松花酿酒,春水煎茶;你说你讨厌父亲的世故虚伪,却不知他也曾满目星辰,桀骜潇洒。),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1.准备工作
1.1 数据库相关
1.2 seata配置相关
2. 微服务项目连接seata
1.准备工作
1.1 数据库相关
(1)首先需要创建如下图所示的数据库用来模拟分布式的架构:
数据库名最好跟图示的一致,能避免一些多余的修改操作
(2)下载所需项目的代码
链接:https://pan.baidu.com/s/1OFh1p0BJxfnzKYQgWtx4cA
提取码:xpnk
解压seata_parent.zip
并使用idea打开项目(最好删除 .idea文件夹,因为maven路径不同)
项目架构如下:
(3)将项目中的sql文件分别导入到之前创建好的数据库中
如果是mysql的8.0版本,就删除 sql文件中的所有 COLLATE = utf8mb4_0900_ai_ci 字段即可成功运行。
表结构和数据如图所示:
1.2 seata配置相关
(1)分别解压之前下载好的seata压缩包
(2)将seata-1.3.0中的script目录复制到seata-server-1.3.0/seata/中
(3)修改 file.conf 文件
(4)seata数据库中导入 mysql.sql文件
步骤:打开seata-server-1.3.0中 \seata\script\server\db 目录,直接在seata中运行sql文件即可。
(5)将你对应的mysql版本的jar包移入上一级目录lib中,我这里是5版本的
(6)修改配置中心和注册中心
打开registry.conf文件
修改内容如下:
registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype = "nacos"nacos {application = "seata-server"serverAddr = "127.0.0.1:8848"group = "SEATA_GROUP"namespace = ""cluster = "default"username = "nacos"password = "nacos"}}config {# file、nacos 、apollo、zk、consul、etcd3type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = ""group = "SEATA_GROUP"username = "nacos"password = "nacos"}}
这里使用的是nacos,所以其他的注册和配置中心都可以直接删除,看起来更清爽一些。
(7)修改配置,选择注册到nacos的一些配置信息
编辑config.txt文件
内容如下:
这里设置了默认为zhengzhou,方便seata管理时使用
(8)把上面修改好的配置放入配置中心
一定要先启动本地的nacos,不然无法注册
找到nacos目录
打开cmd窗口使用命令:
.\nacos-config.sh
或者直接双击,这里使用的是git的是控制面板,建议先下载一个git
运行完毕后,查看nacos控制台
发现已经注册成功
(9)bin目录双击启动seata
或者使用cmd控制台命令
.\seata-server.bat
启动成功
查看nacos服务列表
说明已配置成功。
2. 微服务项目连接seata
(1)每个微服务数据库中分别创建undo_log表
CREATE TABLE IF NOT EXISTS `undo_log`
(`branch_id` BIGINT(20) NOT NULL COMMENT 'branch transaction id',`xid` VARCHAR(100) NOT NULL COMMENT 'global transaction id',`context` VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info',`log_status` INT(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` DATETIME(6) NOT NULL COMMENT 'create datetime',`log_modified` DATETIME(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDBAUTO_INCREMENT = 1DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
这个表用来记录数据回退的日志,不论成功还是失败,最终都会删除数据,清空表
(2)微服务项目父工程引入依赖
<dependencies><!--seata 一定要保证和seata服务的版本匹配--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency></dependencies>
(3)每个微服务的yml配置文件打开注释的内容
(4)在package com.ykq.service.impl包下OrderServiceImpl类中修改事务注解为@GlobalTransactional
(4)启动所有的微服务
发现每个微服务都已经连接seata成功
(5)开始测试
浏览器访问:http://localhost:8001/order/addOrder?userId=1&productId=1&count=10&money=200
如果想看到事务的回滚操作,可以在OrderServiceImpl类中自己加个除0的异常,用来模拟微服务调用链路的故障,导致出现分布式事务的问题。
正常情况下:
异常情况下:
修改后重启order服务
再次访问后查看数据库,发现成功回滚,没有出现分布式事务问题
查看seata控制台,可以看到详细信息
这篇关于seata服务1.3.0版本搭建(你说你讨厌母亲的市侩圆滑,却不知她也曾松花酿酒,春水煎茶;你说你讨厌父亲的世故虚伪,却不知他也曾满目星辰,桀骜潇洒。)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!