seata 集群_SEATA第三章:快速开始AT模式(spring整合)

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

1bc9adcc469e5eebade3d2830bbd35f0.png

一个下单的场景,三个库:库存,余额,订单。客户订购一个商品分为三步,首先去扣减库存,然后扣减客户余额,最后生成订单。 AT项目整 合启动: 敲黑板没有下载seata-samples项目的同学快去下载,本文是用最简单的方式做最有意义的事情,构建项目整合我们省去,但是我们会对整合后的项目进行分析。(https://github.com/seata/seata-samples.git) seata-samples中nacos项目讲解:nacos项目中包含 nacos + dubbo + spring + seata整合。     

470a2eb3faa50d71031989cb9d5b7928.png

这是nacos项目结构,service包下是业务执行接口:
AccountService      账户余额扣减接口
OrderService          订单创建接口
StorageService       库存扣减接口
BusinessService用户订购商品接口
starter是启动类目录
DubboAccountServiceStarter账户扣减服务启动类
DubboOrderServiceStarter订单创建服务启动类
DubboStorageServiceStarter库存扣减服务启动类
DubboBusinessTester用户订购商品启动类
ApplocationKeeper类是启动辅助类目的是为了让服务继续存活。 配置文件中 registry.conf 和 file.conf是seata客户端所需要的, r egistry.conf是注册中心和配置中心的配置文件,当配置中心是默认的file时file.conf才会起作用,大家放心关于配置文件属性以及版本差异我会单独拿出一章节来讲。 spring包下是spring和dubbo的配置文件,重点就是这几个配置文件,我们拿出来一一说明下。dubbo-account-service.xml 账户扣减服务配置文件,这个配置文件我们大概分为三部分:数据源配置,dubbo配置,seata配置。

1dd946be6e7927708115f7c06cedd10b.png

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

560068af1fa02b3be6c6f57bd2b8c2ce.png

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

7bcacc71b7176ca23e308bf07704e086.png

配置seata的扫描器,两个参数applicationId,txServiceGroup。applicationId代表RM服务唯一标识,当需要部署多个微服务他们之间的 applica tion Id不能重复(如果是同一个服务部署多台可重复)。 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配置:

    556d087cde7a721685f47d54c9b4b67b.png

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

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

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

    9e9c91f8418320da54e1a8d60b2c1934.png

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

    02dc4064469658ccb67951f8bee11601.png

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

f966ac43b358090ce32b3b6638f7a1cd.png

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

c43135cb85ad8abb9580dbad8d8fd225.png

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

下一个小章节我们讲述 seata-samples中spring-boot-seata,seata与spring boot整合的AT项目。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值