阿里分布式事务seata入门(采坑)
1. 阿里分布式事务seata入门(采坑)
1.1. 前言
seata
是feascar
改名而来,这是阿里在19年年初开源出来的分布式事务框架,当初刚出来的时候就想研究下了,一直拖到了现在,目前是0.8.0
版本,看版本就知道这还是个比较新的项目,但现在已经有上万个Star了,可见阿里的影响力。但是虽然有阿里背书,该挖坑还得挖,它宣称集成它比较简单,导致的是现在它的文档优点残缺不全,好几个文档标题点进去都没内容,不知道为什么删了,可能是更新比较快,文档跟不上节奏索性删了[手动滑稽]
1.2. 快速开始
1.2.1. 找Demo
- 一般来讲我们要集成这种第三方中间件肯定要去找官方的demo,在官方文档下面,我找到了Seata Samples,看版本目前都是
0.8.0
1.2.2. 目录分析
因为我公司用的SpringCloud那一套,没有用dubbo,所以关于dubbo的我就没运行了
- 看它例子的目录结构,我们也能够知道它大概运行的是啥
这里首先要关注其实是文档,虽然少的可怜,但总算找到一个,可以直接点这里
1.2.3. 运行springboot-mybatis
- 我首先运行的是依赖最少的
springboot-mybatis
,只需要开启个服务端,配置好本地数据库,建好表就可以运行了,这个其实没什么好说的,我运行的也很顺利,只需要运行该目录下sql目录下的all_in_one.sql
里的所有语句,就会帮你建好数据库插入基本数据,至于服务端的下载可以点击这里下载 - window系统直接双击运行上述服务端解压包里的
seata-server.bat
,liunx系统运行seata-server.sh
这个,它默认开启8091
端口,配置文件在/conf
目录下,主要需要修改的是file.conf
和refistry.conf
,之后会讲到 如下图目录下除了
common
不需要运行,其他四个都运行起来,然后调用localhost:8084/api/business/purchase/commit
,查看数据库会发现order表添加了数据,storage表扣减了库存,account里扣减了钱
再是测试回滚的情况
调用如上接口
localhost:8084/api/business/purchase/rollback
,再看account
系统
实际上是对特殊的用户抛了个异常导致的回滚,你可以在抛异常之前打上断点,运行到这时你会发现,去看数据库,库存已经扣了,订单已经添加了,
undo_log
表有了记录,这涉及到它的回滚原理了,大概说一句,通过已经运行sql进行记录日志,成功了删掉日志,失败了通过日志来回滚数据,再删掉日志,所以不管怎么样,日志应该是不存在的,若存在说明系统是异常宕机,启动后也应该会继续回滚
1.2.4. 小总结
- 通过快速开始,我们就可以快速的运行成功它的demo了,目前还没遇上坑,但是目前为止我们都用的默认配置,基本没看过它的配置该如何改动,接下去看Seata的配置文件
1.3. Seata
配置文件
1.3.1. registry.conf
- 官方文档地址
- 他这里特意提了句
service.vgroup_mapping这个配置,在 Spring Cloud 中默认是${spring.application.name}-fescar-service-group,可以通过指定application.properties的 spring.cloud.alibaba.seata.tx-service-group这个属性覆盖,但是必须要和 file.conf 中的一致,否则会提示
no available server to connect
结果我在运行
springcloud-eureak-seata
时真遇到了,这里就体现了它文档的匮乏,我觉得每个例子下面都应该放个文档的注意事项吧,不放每个例子下面,wiki里多写点也好啊,我们不是开发人员,对seata并不熟,特别是对它的配置,主要的两个配置文件registry.conf
和file.conf
各个系统都存在,但对它的注意事项和描述只有Sample
项目里的quick-integration-with-spring-cloud.md
文件里提到了一句,对刚接触这个项目的人很不友好- 该文件是用于指定注册中心和配置文件,默认情况下是本地文件存储,所以一开始的mybatis项目我们没感觉需要依赖,然后上面的这句提醒也成功带歪了我,让我没想到是服务端出了问题
该文件可以选择
file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
这些注册中心,指定file、nacos 、apollo、zk、consul、etcd3
这些配置文件存储,所以提醒一句用eureka作为注册中心的这边的类型记得改
1.3.2. file.conf
- 用于指定TC(事务协调器)的相关属性
- 它还写了
如果使用注册中心也可以将配置添加到配置中心
,我又要吐槽了,我用的apollo
作为配置中心,请问如何把这个配置文件放apollo
里去,同样毫无文档,我得之后自己看源码去研究 这里在demo里重要用到的属性
service.vgroup_mapping.my_test_tx_group
,这个key的值就相当于服务端的服务名,在Eureka的效果,相当于如下
如果没用Eureka这种注册中心,就一定需要填写服务端地址,对应
service.default.grouplist
的值
至于其他还有n多的属性,抱歉,没有文档,除了能从字面看懂意思的,你不懂就去看源码吧,反正我就不写文档
1.4. SpringCloud集成
1.4.1. 采坑
- 准备运行
springcloud-eureka-seata
,第一次我全部运行,报了no available server to connect
之后一直再检查配置哪里有对不上?纠结了好久,终于让我反应过来,这是服务端不对 - 在服务端修改了
type = "eureka"
还是报错,但我一直在debug,我知道已经不是原来的问题了,最终的解决之道是本地运行,把服务端的file.conf
中service.default.grouplist = "172.16.100.141:8091"
地址改成内网地址,不要用127.0.0.1
,踩了两个坑总算调试成功了,把demo是成功运行起来了,之后的挑战是集成到自己的项目 - 这里又该吐槽了,除了快速启动,没有其他的集成文档,也就是除了引用jar包还需要干什么唯一的参考就是
Sample
项目了,这个项目集成的坑明天有空继续踩了
1.5. 总结
- 项目的技术思想是好的,分布式事务的模式也不止一种(虽然它的文档就演示了这么一种),相信它也会不断把阿里分布式事务的优秀思想结合进来,还是值得期待的
阿里分布式事务seata入门(采坑)的更多相关文章
- 微服务开发的最大痛点-分布式事务SEATA入门简介
前言 在微服务开发中,存在诸多的开发痛点,例如分布式事务.全链路跟踪.限流降级和服务平滑上下线等.而在这其中,分布式事务是最让开发者头痛的.那分布式事务是什么呢? 分布式事务就是指事务的参与者.支持事 ...
- SpringCloud系列之集成分布式事务Seata应用篇
目录 前言 项目版本 项目说明 Seata服务端部署 Seata客户端集成 cloud-web module-order module-cart module-goods module-wallet ...
- 分布式事务 Seata Saga 模式首秀以及三种模式详解 | Meetup#3 回顾
https://mp.weixin.qq.com/s/67NvEVljnU-0-6rb7MWpGw 分布式事务 Seata Saga 模式首秀以及三种模式详解 | Meetup#3 回顾 原创 蚂蚁金 ...
- 分布式事务(Seata)原理 详解篇,建议收藏
前言 在之前的系列中,我们讲解了关于Seata基本介绍和实际应用,今天带来的这篇,就给大家分析一下Seata的源码是如何一步一步实现的.读源码的时候我们需要俯瞰起全貌,不要去扣一个一个的细节,这样我们 ...
- 阿里分布式事务解决方案-GTS
摘要: 本文将深入和大家探讨微服务架构下,分布式事务的各种解决方案,并重点为大家解读阿里巴巴提出的分布式事务解决方案----GTS.该方案中提到的GTS是全新一代解决微服务问题的分布式事务互联网中间件 ...
- spring boot:使用分布式事务seata(druid 1.1.23 / seata 1.3.0 / mybatis / spring boot 2.3.2)
一,什么是seata? Seata:Simpe Extensible Autonomous Transcaction Architecture, 是阿里中间件开源的分布式事务解决方案. 前身是阿里的F ...
- SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截
项目依赖 SpringBoot 2.5.5 SpringCloud 2020.0.4 Alibaba Spring Cloud 2021.1 Mybatis Plus 3.4.0 Seata 1.4. ...
- 出席分布式事务Seata 1.0.0 GA典礼
前言 图中那个红衣服的就是本人 什么是分布式事务 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上. 简单的说,就是一次大的操作由不同的小 ...
- 分布式事务(Seata) 四大模式详解
前言 在上一节中我们讲解了,关于分布式事务和seata的基本介绍和使用,感兴趣的小伙伴可以回顾一下<别再说你不知道分布式事务了!> 最后小农也说了,下期会带给大家关于Seata中关于sea ...
随机推荐
- 踩坑 Spring Cloud Hystrix 线程池队列配置
背景: 有一次在生产环境,突然出现了很多笔还款单被挂起,后来排查原因,发现是内部系统调用时出现了Hystrix调用异常.在开发过程中,因为核心线程数设置的比较大,没有出现这种异常.放到了测试环境,偶尔 ...
- css inline-block 水平居中
给父元素添加text-align: center即可. body { text-align: center; background-color: black; } #outer { margin: 1 ...
- fjnuoj 1003 学长的QQ号
题目: //QQ是一个9位数,由1,2,3,4,5,9组成,且第1.6位数字相同,第2.4位数字相同,第5.7位数字相同. //我的QQ就在符合上诉条件中的所有9位数从小到大排第 ...
- Codeforces比赛注意事项(英语比较好,能翻译题目的可以跳过此文章)
由题目可知,这篇文章是讲翻译文章的. 当然不是教英语啦 其实cf的比赛对于本蒟蒻最大的挑战就是翻译题目啦 所以我比赛时只能靠各种翻译器去无耻地翻译,然后读中文. 目前较好的翻译器有:百度,谷歌,有道. ...
- Python_Day1_人人都爱列表
列表由一系列按特定顺序排列的元素组成.你可以创建包含字母表中所有字母.数字0~9或 所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系. 鉴于列表通常包含多个元素,给列 ...
- C#文件操作 File(静态类)
操作某一个文件/文件夹,需要一个文件的完整路径 一.使用File的静态方法进行文件操作 1 2 3 4 5 6 7 8 9 //使用file的静态方法进行复制 File.C ...
- C语言编程入门之--第三章编写第一个C语言程序
第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...
- python 感悟
* 优美胜于丑陋.* 显式胜于隐式.* 简单胜于复杂.* 复杂胜于难懂.* 扁平胜于嵌套.* 稀疏胜于紧密.* 可读性应当被重视.* 尽管实用性会打败纯粹性,特例也不能凌驾于规则之上.* 不要忽略任何 ...
- Python版:Selenium2.0之WebDriver学习总结_实例1
Python版:Selenium2.0之WebDriver学习总结_实例1 快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 实属转载:本人看的原文地址 :http:/ ...
- window下不用安装虚拟机,也可以玩转linux,玩转最新redis
想要了解redis的最新特性,可是windows下的可以安装的版本最高为3.2,想要验证redis的诸如stream特性的话,就无能为力了. 解决方法之一在windows上安装虚拟机,然后再虚拟机上安 ...