seata

参考博客:https://www.pianshen.com/article/84721946457/

https://www.jianshu.com/p/dec4550efbfc

参考视频:https://www.bilibili.com/video/BV12Q4y1A7Nt

特别注意:Seata目前只支持JDK1.8,我用jdk11、jdk14都不能正常运行,都报同一个gc的问题,估计是垃圾回收啥的。

一、下载

官网:http://seata.io

GitHub地址:https://github.com/seata/seata

1.1、下载

1.2、解决下载失败

因为这是国外的服务器,下载是是否缓慢的。有些时候快下载玩了,直接失败了。所以想下载是非常费力的,下面介绍一个网站,直接复制连接即可。

网址:https://offcloud.com/#/instant

邮箱:342591431@qq.com
密码:[通用密码]

这样就下载完成了

二、更改配置

2.1、复制文件和注入sql脚本到MySQL

在项目的 nimble-make\nm-demo\springCloudAlibaba\spring-cloud-seata\file文件下有。

复制文件

1.0以前版本的seata复制一下四个文件,在官网也能寻找到。

注:seata官方从1.0版本后不再提供sql脚本,以及nacos推送配置脚本,需要从0.9.0的版本复制

  • 从官网寻找文件

nacos-config.sh 文件: https://github.com/seata/seata/tree/1.3.0/script/config-center/nacos

nacos-config.txt文件:https://github.com/seata/seata/tree/1.3.0/script/config-center

db_undo_log.sqlsql文件 https://github.com/seata/seata/tree/1.3.0/script/client/at/db

db_store.sqlsql文件 https://github.com/seata/seata/tree/1.3.0/script/server/db

注入sql脚本

db_store.sql中只有三张表,将这三张表保存道MySQL中的 seata这个数据库中。

db_store.sql这个是seata控制事务的时候需要使用到的。将这个sql放到MySQLseata这个数据库下面,这个数据名是默认的,我们可以更改。但是一般我们都使用默认的。

db_undo_log.sql这个sql文件中只有一张 undo_log 表,是专门保存事务的唯一id这些的,这张表需要在我们需要控制事务的每个数据库中,也就是说我们需要使用到全局事务的所有库中都需要添加这张表。目前我的案例中虽然有四个微服务,但是我连接的库都是同一个,所以我就在这个库中添加这张表。

2.2、更改配置文件

虽然我使用JDK11jdk14都没有启动成功,但是我电脑是安装JDK14的,所以我是在虚拟机中安装测试的。配置文件我就在Windows上展示了,都一样的。

修改file.conf文件

文件在 \seata\conf目录下。

注意使用mysql8.0及以上版本的需要将驱动更改为:driverClassName = “com.mysql.cj.jdbc.Driver”

查询MySQL版本:在NavicatSELECT VERSION();就可以查询到了。

这里数据库的驱动并不难找到,以为我们项目中就连接过数据库,所以说就直接到我们本地仓库中就可以找到数据驱动的jar包了。寻找的时候,首先找到数据库驱动引入方式,在找到本地仓库,根据驱动引入的路径就可以寻找到。

修改registry.conf文件

这里主要有两个父节点 registryconfig,分别将这两个节点的的type动改为nacos,那么其余的注册中心配置就可以删除了。

更改后的文件

registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype = "nacos"nacos {application = "seata-server"serverAddr = "192.168.164.128:8848"group = "SEATA_GROUP"namespace = ""cluster = "default"username = "nacos"password = "nacos"}
}config {# file、nacos 、apollo、zk、consul、etcd3type = "nacos"nacos {serverAddr = "192.168.164.128:8848"namespace = ""group = "SEATA_GROUP"username = "nacos"password = "nacos"}
}

applicationseata启动后注册到nacos的服务名(愿意改就改,不愿意改就默认就行)

需要注意:如果这里更改了,在程序中可能也要更改,应该要保持一致吧,没有测试过。

注:group默认为:SEATA_GROUP,更改DEFAULT_GROUP或者和自己服务相同的group,否则会报错No available service

修改 nacos-conf.txt文件

注意:这个文件在seata1.0.0版本以后是不提供的,需要在之前版本中复制,2.1复制文件这里说的很清楚了。

service.vgroupMapping.my_test_tx_group=default
service.disableGlobalTransaction=false
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://www.it307.top:3306/seata?useUnicode=true
store.db.user=root
store.db.password=mallmysql
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

官网上写的很多,但是都有默认的,我们只需要关键这些就可以了。

nacos-conf.txt文件发送到nacos注册中心

这时就要使用到 nacos-config.sh这个文件了,这个文件的来源 2.1小结也说了。这里要确保 nacos-conf.txt文件和nacos-config.sh命令要在同一个文件夹下面,否则怎么知道你的问价在哪里呢?

一般使用的命令

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password

-h:主机,默认值为localhost。

-p:端口,默认值为8848。

-g:配置分组,默认值为“ SEATA_GROUP”。

-t:租户信息,对应于Nacos的名称空间ID字段,默认值为。

-u:用户名,权限控制上的nacos 1.2.0+,默认值为。

-w:密码,权限控制上的nacos 1.2.0+,默认值为“”。

这里因为是Linux命令,所以我们需要使用git的命令窗口,或者直接在Linux服务器上发送也行。

sh nacos-config.sh -h 192.168.164.128 -p 8848 -unacos -wnacos

其他默认值,我们可以不用带,这里的用户名密码和端口都可以不用带,这些都是默认值。

注意:官方是说这样可以将配置文件推送到nacos的,但是我试了一直提示 ./nacos-config.sh nacosIp,所以推不上去。

sh nacos-config.sh 192.168.164.128

我直接这样推送,结果是没有问题的。可能是应为我是在Windows上使用git命令模拟操作的把。但是这样的没有关系,最后nacos数据持久化时都是采用MySQL存储,如果推不上去,那么我们就启动一个用户名和密码和端口等等都是默认的nacos,将数据推上去了,在从MySQL中将数据赋值到正式的nacos对应的MySQL库中。毕竟做持久化只需要配置一下就行了,不是很麻烦。

这个配置如果不注入nacos控制台会不断答应 no available service 'null' found, please make sure registry config correct,找不到可用服务null,请确保注册表正确。

2020-10-18 00:06:29.848 ERROR 11884 --- [eoutChecker_2_1] i.s.c.r.netty.NettyClientChannelManager  : no available service 'null' found, please make sure registry config correct

三、搭建seata

3.1、更改配置文件

3.2、启动

启动的时候报了一个连接MySQL的异常,因为我们之前将 nacos-config.txt中的配置文件nacos中了,所以导致seata不能启动,但是 nacos-config.txtseata这里的 file.confregistry.conf文件都没有配置错误。

  • 解决方法

nacos-config.txt文件注入到nacos中的数据全部删除,在启动seata

  • 在启动seata

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0NfvFbaB-1609121985939)(C:\Users\stars\AppData\Roaming\Typora\typora-user-images\image-20201017232807913.png)]

这里的服务名是在 registry.conf文件中配置的。

四、对接案例

4.1、整体业务流程梳理

我这里写了四个功能,分别是业务服务,订单服务,库存服务,账号服务。另外还有一个公共模块,因为之前的seata需要自己写一个定义一个数据源和代理,但是我这次是写了,但是没有使用,结果还是能够实现分布式事务的效果。

首先访问 business-service业务模块中的 /placeOrder/placeOrderFallBack接口,这两个接口其实都一样,只是传输的参数不同而已。这连个接口去调用库存服务 storage-service减库存,和订单服务处理订单 order-service。然后订单服务处理完订单后有调用账号服务 account-service去减少用户的余额等信息。但是如果用户等于 U002,那么我们就在账号服务中制造一个异常,让之前处理的全部数据回滚。

4.2、maven依赖说明

  • 引入seata依赖
<!--seata-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><!-- 将当期依赖中seata-all排除掉,重新引入 --><exclusions><exclusion><artifactId>seata-all</artifactId><groupId>io.seata</groupId></exclusion></exclusions>
</dependency>
<!-- 引入 seata -->
<dependency><groupId>io.seata</groupId><artifactId>seata-all</artifactId><version>1.3.0</version>
</dependency>

为什么需要将里面的 seata-all排除掉重新引入,原因不太清楚。 spring-cloud-starter-alibaba-seata依赖的版本号是在 spring-cloud-alibaba-dependencies版本控制器里面定义好了。我们新引入的 seata-all依赖的版本号就和seata一样。seata我们使用哪个版本的,这里就使用哪个版本就OK。

只要涉及到分布式事务控制的时候,都需要这个依赖,因为里面涉及到一个xid分布式事务id的传递。这个功能目前不用我们担心了,但是可以去参考一下官方文档上的介绍。

这里因为测试的这几个工程都在同一个父工程下面,每个工程都需要连接数据库和事务这一块,我就将seatamybatisplus和数据库驱动等依赖同一放在这几个工程的父pom中了。

其实每个工程下面还有一个web依赖和nacos注册与发现的依赖,这两个依赖完全可以放到父pom中的,不过不想更改了,就这样吧。

4.3、yml配置讲解

bootstrap.yml中配置nacos相关来接,application.yml在这里配置都一样,没有固定要求的。

4.4、测试

注意:这个nacos-config.txt文件我们之前注入nacos再去启动seata,提示mysql那边有些问题。所以我们将 nacos-config.txt注入到nacos的所有配置文件都删除了,现在还没有添加进去。如果现在启动微服务,是能够启动成功,但是只要遇到 @GlobalTransactional注解的地方就不能使用了。控制台会一直打印一下错误信息。

2020-10-18 00:10:09.438 ERROR 15876 --- [eoutChecker_2_1] i.s.c.r.netty.NettyClientChannelManager  : no available service 'null' found, please make sure registry config correct

nacos-conf.txt注册到nacos中,参考 2.2小结。

  • 将四个微服务启动

没有顺序而言,随便起。

  • 目前的数据状况

  • 正常流程
http://localhost:9090/placeOrder
  • 异常请求,数据回滚
http://localhost:9090/placeOrderFallBack

请求一下正常流程

这个结果是满意的,因为没有出现任何差错。

请求一次异常,然后在观察一下数据,数据是否回滚。

五、seata集群

集群,其实可以多启动几个seata到注册中心就可以了,但是另外还有一个根据事务组来隔离,应该可以说成隔离吧。

像nacos注入多个seata,可以在命令后面添加 -p 端口号

sh seata-server.sh -p 8094

  • 使用事务分组

registry.conf配置文件中 nacos.cluster名称更改为集群名称,在将 nacos-config.txt文件中的 service.vgroupMapping.my_test_tx_group=testCluster更改为对应的集群明名称,因为这个是注入nacos中的,直接在nacos中更改也可以。最后在项目的配置文件中指定事务组 tx-service-group: my_test_tx_group,这样就搞定了。

  • 启动项目

这里的使用群组的方式集群,不知道哪里还有些小毛病没有成功。

常见的问题

io.seata.common.exception.FrameworkException: can not connect to services-server.

提示无法连接到 services-server服务器,一般需要注意一下配置。

其次就检查,是不是部署的seata挂了。我目前的状态就是部署号的seata关闭了。

seata分布式事务处理教程相关推荐

  1. SpringCloud Alibaba实战--第八篇:Seata分布式事务处理

    系列文章目录 微服务新王SpringCloudAlibaba 文章目录 系列文章目录 前言 一.Seata简介 1. Seata是什么? 2. ID+三组件模型 3. 处理过程 二.Seata下载安装 ...

  2. Spring Cloud Alibaba 综合应用:Seata 分布式事务实战教程

    在前面的章节,我们分别讲解了 Spring Cloud Alibaba 中主要的组成部分,其中包括:注册中心与配置管理组件 Nacos.Ribbon 客户端负载均衡.OpenFeign 与 Dubbo ...

  3. Seata 分布式事务的使用和原理浅析

    Seata 分布式事务的精简使用教程和原理浅析 一.说明 二.Seata 简介 2.1.Seata 是什么? 2.2.Seata 的整体架构 2.2.1.主要角色 2.2.2.整体架构和工作流程图 2 ...

  4. Dubbo分布式事务处理--视频教程

    Dubbo分布式事务处理是使用Dubbo作为分布式服务化框架时的一个难题,本教程将提供"基于可靠消息的最终一致性分布式事务解决方案"."TCC两阶段型分布式事解决方案&q ...

  5. ORA-02409 超时 分布式事务处理等待锁定ORA-02063

    ORA-02409:超时:分布式事务处理等待锁定ORA-02063 一.错误现象与环境     前端应用程序运行时出现下面的错误提示:          事件添加失败:ORA-02409;超时:分布式 ...

  6. Seata分布式事务模式(TA、TCC、XA、SAGA)工作机制

    文章目录 前言 分布式应用痛点 分布式事务解决方案 Seata Seata AT模式 前提 工作机制 一阶段 二阶段-提交 二阶段-回滚 Seata TCC模式 前提 工作机制 Seata Saga模 ...

  7. 全面剖析Seata 分布式事务 AT 与XA

    前言 昨天有小伙伴私信小编说想小编出一期Seata分布式事物XA与AT模式的解析,经过昨晚的熬夜加班整理,今天将为大家带来Seata 分布式事务 XA 与 AT 的全面剖析.文章分为:XA模式是什么? ...

  8. Seata分布式事务XA与AT全面解析

    Seata 分布式事务 XA与AT Seata 是一款开源的分布式事务解决方案,star高达17300+,社区活跃度极高,致力于在微服务架构下提供高性能和简单易用的分布式事务服务. 注:本期分享借鉴于 ...

  9. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案

    SQL 错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有 01591. 00000 -  "lock held by in-doubt distributed ...

  10. 错误信息:Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务

    在联机文档中是这样描述MS DTC的: Microsoft 分布式事务处理协调器 (MS DTC) 是一个事务管理器,它允许客户端应用程序在一个事务中包含多个不同的数据源.MS DTC 协调在所有已在 ...

最新文章

  1. serverless 框架_研发的未来在哪里?Serverless 云开发来了!
  2. 项目交接文档_会计实操||会计人员交接范例
  3. 腾讯企业级消息中间件CMQ技术解密
  4. 视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
  5. 计算机二级c语言考试不够,2019计算机二级考试注意事项 必须要知道
  6. 在多行中查找和替换vim中的字符串
  7. windows远程连接linux系统(图文)
  8. Ubuntu:Terminal终端命令
  9. 调查:2013年十大急需的热门IT技能
  10. 锐起无盘服务器蓝屏死机,正确配置减少锐起无盘系统死机蓝屏
  11. 车载电子电器防水防尘等级介绍
  12. 肌营养不良最新研究进展(2021年)
  13. 分布式事务之两阶段提交
  14. Java应用中CPU使用率过高该怎么解决
  15. linux创建运维账户流程,Linux运维养成记-账户与权限管理
  16. 盘点MES系统物料管理那些事儿
  17. 今日头条(layout下xml布局)
  18. svn提示没有设置冲突_SVN冲突以及解决办法
  19. 服务器客户端传输文件,服务器传输文件到客户端
  20. KubeEdge SIG AI发布首个分布式协同AI Benchmark调研

热门文章

  1. 汽车自主品牌与国际品牌差距为十年来最小;智选假日酒店大中华区已开业200家 | 美通企业日报...
  2. Extraneous non-emits event listeners (xxxXxx) were passed to component but could not be automaticall
  3. 运动会加油稿计算机学院150字,学校运动会加油稿150字5篇
  4. 【SPFA】【最短路】 腾讯大战360
  5. 我与龙芯电脑的第一次亲密接触
  6. CleanMyMac4.12.2最新免费的macOS电脑清理工具
  7. 。三十功名尘与土,八千里路云和月。莫等闲,白了少年头,空悲切
  8. 测试用例设计——错误猜测法
  9. laravel路由设置
  10. 数据可视化软件finebi实现对濒危物种基础数据分析