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)微服务项目父工程引入依赖

    com.alibaba.cloudspring-cloud-starter-alibaba-seata

(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控制台,可以看到详细信息


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部