当前位置: 移动技术网 > IT编程>开发语言>Java > SEATA第三章:快速开始--AT模式(spring整合)

SEATA第三章:快速开始--AT模式(spring整合)

2020年07月17日  | 移动技术网IT编程  | 我要评论

​上一章节我们安装了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项目的配置以及结构,接下来我们开始修改其中的配置文件进行启动。

  1. 修改jdbc.properties中三个数据库的连接信息

  2. 修改四个xml中dubbo注册中心地址配置

  3. registry.conf 中 registry -> type 设置为nacos 代表注册中心使用nacos,config -> type 设置为 file 代表配置中心使用本地file文件。

    nacos配置:

     

    application:对应的是seata-server启动后注册到nacos的服务名称,这个配置错误后客户端启动就会遇到常见的 无有效server

    serviceAddr:nacos地址信息,端口默认8848

  4. 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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网