分布式事务方案-Seata-AT模式入门

分布式事务作为分布式架构中必须面对的一个问题。其中我觉得比较成熟的实现方案有最终一致性的可靠消息实现、强一致性的分布式框架JTA(XA规范的JAVA实现)、阿里的Seata(两阶段);这里我记录了一下入门过程中踩过的坑

一些介绍分布式事务解决方案的文章:

我们这里来学习一下阿里的开源分布式方案Seata,学习建议重点关注的学习资源

快速入门

在Seata的结构里,角色分为Server(TC)端,其主要功能是记录和管理和协调全局分布式事务
Client端,即我们的业务端(TM、RM端)

说实话Seata的官网资料虽然说有那么多、比较详细,但是对于一个从来没有接触过的人来说还是要花一点时间;比如我开始就不明白 registry.conf 里 registry 和 config 为什么配置成file模式就不用初始化配置文件,而使用nacos就需要做配置初始化,而且这些配置有什么作用也清楚;
但我根据网上的教程先弄file模式,直接启动就能用(原理以后再去理)

Server端下载

开始我们讲了,Seata会有一个server端,用来控制全局事务的提交和回滚;这个服务是需要单独部署的,它的下载地址是: Release
在这里可以下载稳定的版本(我下载的是1.2.0版本)
在这里插入图片描述

Seat相关配置

解压后我们进入目录
在这里插入图片描述
查看 registry.conf 文件

file模式

如果想要单机启动,不需要配置任何配置,直接执行bin目录下的启动文件
在这里插入图片描述

file模式配置

从配置文件上看,如果 registry 的type和 config的type都设置成 file(去掉了其他多余的内容),则真正的配置是在一个叫 file.conf里的
在这里插入图片描述

file.conf

这个文件 store的mode 我配置的是db,意思是seata server全局事务的记录如:分支事务信息,全局锁信息都会存在数据库里(这个配置默认是file,所以上面提到的seata server是可以解压后直接启动,不需要做任何操作,如果是db的话则需要修改对应的url、user、password等配置)
在这里插入图片描述

db数据库脚本

db模式是为了支持多实例部署(我的理解),db模式需要给server配置一个数据库连接,并初始化3张表;具体脚本在这里
在这里插入图片描述
找到对应的脚本并执行
在这里插入图片描述
这样file-file模式,file-db模式就配置完成了

扫描二维码关注公众号,回复: 13235111 查看本文章
分布式模式之nacos

我们这里主要讲以nacos为注册中心和配置中心
进入conf目录
在这里插入图片描述

registry.conf

打开 registry.conf 文件,我们把 registry 的type和 config的type都设置成nacos;这样seata server启动的时候就会把自己注册到nacos上,Seata server所需的配置也会从nacos上获取;

  • registry的type和config的type 我们都配置成 nacos
    (反正别人都这么做,至于一个配nacos,一个配成file能不能成功没有试过;后面有时间了再研究,这里我们先入门),在配置成nacos后其他的配置详情是可用删掉的(这个文件是我删除了其他配置中心后的最终效果);

在这里插入图片描述

  • nacos 相关详细配置
    nacos的json里我是配置的本地nacos,我本地nacos新建了一个“test01”的命名空间(它的命名空间ID是 f756710e-3676-48dd-bdd6-624b03fea322 ),如果你想把seata注册到nacos public命名空间下,上面的namespace配置可以留空。
    在这里插入图片描述
初始化nacos相关配置

由于使用nacos作为配置中心,就需要对nacos做数据初始化(比如seata server所需的数据库这样的信息需要初始化到nacos上),初始化是通过脚本(分为以下几个步骤)

  • 基础数据获得
    通过上面的链接我们把一个名字叫“config.txt”的文件下载下来
    在这里插入图片描述
    放在seata server的home目录,因为下载的安装包是不带这个文件的
    在这里插入图片描述
    获得文件后,根据实际情况修改里面的内容,重要修改点是数据库相关配置(跟上面讲的file-db模式下的数据库修改是一个东西,一个是存文件里,一个会被初始化到nacos上)

在这里插入图片描述

  • 脚本获得
    nacos数据初始化脚本也没有打包到安装包里,需要手动[下载] (https://github.com/seata/seata/tree/develop/script/config-center/nacos)
    在这里插入图片描述
    这个文件下载后需要放到seata server的conf目录下,即基础数据文件“config.txt”需要在脚本文件“nacos-config.sh”的父目录
    在这里插入图片描述

  • 执行脚本初始化数据
    脚本执行的详细说明在这里 Readme以查看到
    在这里插入图片描述
    以下是执行命令(window可以在git bash里执行!)

sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password

Server端启动

我下载的是1.2.0版本,解压后都用的默认配置,直接启动“seata-server.bat”
在这里插入图片描述
sessionStore是启动后自动生成的本地文件,效果

在这里插入图片描述

业务系统 Client

业务系统就是我们的业务代码,以下摘自官方文档

Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。

项目结构
在这里插入图片描述
拓扑说明:api是dubbo定义的接口,busi是事务的发起端,分表调用order服务和pay服务;
配置以 order 模块为例子:

client端(业务端 yaml文件)的配置可以参考 https://github.com/seata/seata/tree/1.4.0/script里的文件,找了一圈没有详细说明,只能凭空想象;
在这里插入图片描述

示例代码地址

代码上传到了 Gitee 的seata模块,clone后直接参考配置;

  • https://gitee.com/aqu415/demo

在这里插入图片描述
测试用例说明:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Aqu415/article/details/115652899