欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 19:09:34
​上一章节我们安装了seata-server和所需要的其他组件,这一章节我们讲述seata的AT:框架整合,快速启动。AT案例我们都选用 dubbo+nacos+seata 1.2.0整合。maven的聚合项目构建此章节不会演示,建议大家先下载seata的官方demo项目 seata-samples。事半功倍!AT业务场景:一个下单的场景,三个库:库存,余额,订单。客户订购一个商品分为三步,首先去扣减库存,然后扣减客户余额,最后生成订单。AT项目整合启动:敲黑板没有下载seata-sam...

​上一章节我们安装了seata-server和所需要的其他组件,这一章节我们讲述seata的AT:框架整合,快速启动。AT案例我们都选用 dubbo+nacos+seata 1.2.0整合。maven的聚合项目构建此章节不会演示,建议大家先下载seata的官方demo项目 seata-samples。事半功倍!


AT业务场景:

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

一个下单的场景,三个库:库存,余额,订单。客户订购一个商品分为三步,首先去扣减库存,然后扣减客户余额,最后生成订单。

AT项目整合启动:

敲黑板没有下载seata-samples项目的同学快去下载,本文是用最简单的方式做最有意义的事情,构建项目整合我们省去,但是我们会对整合后的项目进行分析。(https://github.com/seata/seata-samples.git)

 

seata-samples中nacos项目讲解:

nacos项目中包含 nacos + dubbo + spring + seata整合。

    

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

这是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配置。

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

第一个bean是数据源配置,第二个bean是seata的数据源代理,当我们使用AT模式必须配置seata的数据源代理,不然可能导致提交回滚失败。第三个bean是常见的orm框架数据源配置。

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

dubbo的注册中心,提供者等配置,dubbo的注册中心我们依然选用的是nacos。

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

配置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配置:

     

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

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

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

  4. file.conf 中一般我们先以默认配置走,但是需要注意一个配置信息

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

    vgroupMapping.my_test_tx_group = "default"解析一下,这是通过逻辑分组获取seata-server集群名称的配置,敲黑板,集群名称:

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

    我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注册的提供者和消费者:

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

接着我们最终启动DubboBusinessTester类,启动之前我们大约看下逻辑business在生成订单之后显示的抛出一个异常,理论上说当所有数据都变更后会回滚,那我们在这里打个断点,可以看到未回滚之前和回滚之后的数据变化。我么开启以debug方式启动DubboBusinessTester,在执行到断点后我们查看storage_tbl

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

库存是被扣减了,放开断点,在查看count数据发现已经恢复到100,OK我们服务运行成功。

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

下一个小章节我们讲述seata-samples中spring-boot-seata,seata与spring boot整合的AT项目。

 

本文地址:https://blog.csdn.net/weixin_42599693/article/details/107393653

相关标签: seata java