SEATA第三章:快速开始--AT模式(spring整合)
上一章节我们安装了seata-server和所需要的其他组件,这一章节我们讲述seata的AT:框架整合,快速启动。AT案例我们都选用 dubbo+nacos+seata 1.2.0整合。maven的聚合项目构建此章节不会演示,建议大家先下载seata的官方demo项目 seata-samples。事半功倍!
AT业务场景:
一个下单的场景,三个库:库存,余额,订单。客户订购一个商品分为三步,首先去扣减库存,然后扣减客户余额,最后生成订单。
AT项目整合启动:
敲黑板没有下载seata-samples项目的同学快去下载,本文是用最简单的方式做最有意义的事情,构建项目整合我们省去,但是我们会对整合后的项目进行分析。(https://github.com/seata/seata-samples.git)
seata-samples中nacos项目讲解:
nacos项目中包含 nacos + dubbo + spring + seata整合。
这是nacos项目结构,service包下是业务执行接口:
AccountService | 账户余额扣减接口 |
OrderService | 订单创建接口 |
StorageService | 库存扣减接口 |
BusinessService | 用户订购商品接口 |
starter是启动类目录
DubboAccountServiceStarter | 账户扣减服务启动类 |
DubboOrderServiceStarter | 订单创建服务启动类 |
DubboStorageServiceStarter | 库存扣减服务启动类 |
DubboBusinessTester | 用户订购商品启动类 |
ApplocationKeeper类是启动辅助类目的是为了让服务继续存活。
配置文件中 registry.conf 和 file.conf是seata客户端所需要的,registry.conf是注册中心和配置中心的配置文件,当配置中心是默认的file时file.conf才会起作用,大家放心关于配置文件属性以及版本差异我会单独拿出一章节来讲。
spring包下是spring和dubbo的配置文件,重点就是这几个配置文件,我们拿出来一一说明下。
dubbo-account-service.xml 账户扣减服务配置文件,这个配置文件我们大概分为三部分:数据源配置,dubbo配置,seata配置。
第一个bean是数据源配置,第二个bean是seata的数据源代理,当我们使用AT模式必须配置seata的数据源代理,不然可能导致提交回滚失败。第三个bean是常见的orm框架数据源配置。
dubbo的注册中心,提供者等配置,dubbo的注册中心我们依然选用的是nacos。
配置seata的扫描器,两个参数applicationId,txServiceGroup。
applicationId代表RM服务唯一标识,当需要部署多个微服务他们之间的applicationId不能重复(如果是同一个服务部署多台可重复)。
txServiceGroup事物服务逻辑分组。此分组通过配置中心配置项
service.vgroupMapping.my_test_tx_group 映射到相应的 Seata-Server 集群名称,然后再根据集群名称.grouplist 获取到可用服务列表。(有疑问没关系我们接着往下讲)。
配置文件属性讲解完了,剩余三个配置文件大同小异。
dubbo-order-service.xml | 生成订单配置文件 |
dubbo-business-service.xml | 客户订购配置文件 |
dubbo-storage-service.xm | 减少库存配置文件 |
sql包下是初始化的sql文件。
这里要说明很重要一点(敲黑板),现在我们有三个库,对于每个库都必须初始化undo_log表。为什么呢,seata的AT模式都是基于对jdbc执行过程的增强实现的,在事物提交之前seata会解析你提交的sql获取执行前数据和执行后数据,然后在拼接xid和sql等信息一并存储到你当前服务的数据库中,当某一个分支事物失败了,其他事物的数据回滚完全依托于undo_log表记录的镜像前数据进行反向update实现。
好至此我们详细的剖析了一下nacos这个demo项目的配置以及结构,接下来我们开始修改其中的配置文件进行启动。
-
修改jdbc.properties中三个数据库的连接信息
-
修改四个xml中dubbo注册中心地址配置
-
registry.conf 中 registry -> type 设置为nacos 代表注册中心使用nacos,config -> type 设置为 file 代表配置中心使用本地file文件。
nacos配置:
application:对应的是seata-server启动后注册到nacos的服务名称,这个配置错误后客户端启动就会遇到常见的 无有效server
serviceAddr:nacos地址信息,端口默认8848
-
file.conf 中一般我们先以默认配置走,但是需要注意一个配置信息
vgroupMapping.my_test_tx_group = "default"解析一下,这是通过逻辑分组获取seata-server集群名称的配置,敲黑板,集群名称:
我nacos单台启动,默认集群名称是default,所以呢,server的集群名一定要和vgroupMapping.my_test_tx_group后面值一致。然后接着在说my_test_tx_group的事情,上面我们说了xml中配置seata的scanner的第二个参数是分组名称,xml配置中的分组名称会匹配vgroupMapping.分组名来获取集群名称。
总结一下,registry.conf 中 registry -> nacos -> application 需要对应seata-server名称,vgroupMapping.my_test_tx_group =xxxx,xxxx需要对应seata-server启动的集群名称。
来来来激动的时候到了,我们终于要启动服务了,首先启动除去DubboBusinessTester的三个类,启动之后我们在nacos的管理页面可以看到dubbo注册的提供者和消费者:
接着我们最终启动DubboBusinessTester类,启动之前我们大约看下逻辑business在生成订单之后显示的抛出一个异常,理论上说当所有数据都变更后会回滚,那我们在这里打个断点,可以看到未回滚之前和回滚之后的数据变化。我么开启以debug方式启动DubboBusinessTester,在执行到断点后我们查看storage_tbl
库存是被扣减了,放开断点,在查看count数据发现已经恢复到100,OK我们服务运行成功。
下一个小章节我们讲述seata-samples中spring-boot-seata,seata与spring boot整合的AT项目。
本文地址:https://blog.csdn.net/weixin_42599693/article/details/107393653
上一篇: oracle默认用户权限命令
下一篇: (五)指令集、微架构与编译器