当前位置:   article > 正文

seata分布式事务入门教程【AT】_分布式事务 seat 教程

分布式事务 seat 教程

seata分布式事务入门-小白级

​ 本教程主要是通过seata1.4.0和nacos1.4.0演示seata分布式事务上手体验。如果你对seata和nacos还很陌生建议先点击下面传送门,先穿越10min再回来学习。在这里我将完成一个简单的案例,来让大家了解Seata实现Dubbo分布式事务管理的基本流程。【注:参考每步骤小结,搭建更快哟

一、简介

本文主要介绍SpringBoot2.2.2 + Dubbo 2.7.5 + Mybatis 3.4.2 + Nacos 1.1.3 +Seata 1.0.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据。

 如果你还对`Nacos`、`Seata`不是很了解的话,请访问以下链接:

 - Nacos:https://nacos.io/zh-cn/docs/quick-start.html
 - Seata:https://seata.io/zh-cn/
  • 1
  • 2
  • 3
  • 4

二、环境准备

资源下载:

nacos下载:https://github.com/alibaba/nacos/releases/tag/1.4.0

seata-server下载:https://github.com/seata/seata/releases/tag/v1.4.0

seata源码下载:https://github.com/seata/seata/tree/v1.4.0

seata-samples下载:https://github.com/seata/seata-samples

demo运行环境:

本次demo运行环境为win10、jdk8、git、mysql5.6+、nacos1.4.0、seata1.4.0

三、搭建Demo

第一步:启动nacos注册中心

​ 本地演示单机模式启动,即解压nacos-server-1.4.0.zip,可以看到bin、conf、target,其中bin目录存放的是启停脚本,conf里存放的配置脚本和sql脚本。修改conf/application.properties,增加MySQL数据源配置。如下:
在这里插入图片描述

同时需要新建nacos数据库并执行nacos-mysql.sql脚本,创建nacos对应的表,最后执行命令startup.cmd -m standalone启动nacos。如:
在这里插入图片描述
在这里插入图片描述

小结:
	1)修改nacos存储数据源连接及用户名和密码
	2)创建对应的nacos数据库并执行nacos_mysql.sql脚本
	3)启动nacos单机模式:startup.cmd -m standalone
  • 1
  • 2
  • 3
  • 4

第二步:启动seata-server服务端

​ seata分布式事务是C/S架构,server服务端单独部署。本地演示单机模式启动,即解压seata-server-1.4.0.zip,可以看到bin、conf、lib目录,其中bin目录是启动脚本,conf目录存放的是配置文件及日志配置。重点关注file.conf和registry.conf。

数据存储模式:指定seata-server全局事务表、分支事务表、逻辑锁表数据存储的方式。

file:存储到内存中;db:存储到数据库中;redis:存储到redis中(有丢失数据风险)。如:
在这里插入图片描述
global_table全局事务表

字段描述
xid全局事务id
transaction_id事务id
status事务状态
application_id应用id
transaction_service_group事务分组名称
transaction_name事务名
timeout超时时间
begin_time事务开始实践
application_data应用数据
gmt_create全局事务创建时间
gmt_modified全局事务修改时间

branch_table分支事务表

字段描述
branch_id分支事务id
xid全局事务id
transaction_id事务id
resource_group_id资源组id
lock_key行锁的key
branch_type分支事务类型
status分支事务状态
client_id
application_data应用数据
gmt_create全局事务创建时间
gmt_modified全局事务修改时间

lock_table逻辑锁表

字段描述
row_key行锁记录
xid全局事务id
transaction_id事务id
branch_id分支事务id
resource_id资源id
table_name表名
pk表的主键
gmt_create全局事务创建时间
gmt_modified全局事务修改时间

注册中心及配置中心:本地测试选择file,nacos均可。如选择file则无需修改,本次demo注册中心和配置中心均选择nacos。注意当配置中心为nacos时,本地的file.conf将失去作用,此时需要通过脚本(script/config-center/nacos/nacos-config.py)上传对应的配置文件(script/config-center/config.txt)。注意修改confg.txt配置的存储模式以及数据库连接。如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结:
	1)file.conf指定file存储模式,不方便查看事务表数据,不利于跟踪seata分布式事务,因此建议指定db存储模式,注意db模式需要在对应连接的数据库下新建seata数据库,并执行script/client/at/db/mysql.sql脚本。
	2)registry.conf指定seata-server的注册中心和配置中心,注册中心和配置中心没有必然联系,可以配置不同的值。本次demo均选择nacos,所以注意修改上图标红的配置(切记nacos注册中心的group和cluster配置的值以及config配置中心group的值)
	3)找到上传配置的python脚本,右键通过git工具(Git Bash Here),执行命令:nacos-config.py上传配置文件config.txt内容到nacos配置中心。注意:上传之前修改对应的数据库连接以及存储模式。
	4)启动seata-server服务,双击bin/seata-server.bat脚本或者运行main方法。此时可以通过nacos控制台看到seata-server服务已上线。
	另外:须注意config.txt中一个特殊的关键配置(后面会用到)service.vgroupMapping.my_test_tx_group=default
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第三步:依次启动client端应用服务

​ 本次client端业务demo以seata-samples下的seata-spring-boot-starter-samples为例,先依次修改application.yml配置,然后再新建seata库并执行(sql/db_seata.sql)脚本,初始化表及数据,最后依次启动account、order、storage、business四个微服务。启动完毕后均可以在nacos控制台上看到服务已上线,如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结: 
    1)以account应用为例,修改application.yml配置文件。
    1.1)修改spring数据源jdbc参数
    1.2)修改seata:
             tx-service-group: my_test_tx_group
    1.3)修改seata:
             service:
              vgroup-mapping:
               my_test_tx_group: default 
    注意:seata.tx-service-group的值必须和seata.service.vgroup-mapping的值一致。
    1.4)修改seata:
             register:
              nacos:
               cluster: default
               group: SEATA_GROUP (默认值,如配置修改需显式覆盖)
    2)运行account应用的main方法
    注意:如seata:
            tx-service-group:my_test_tx_group
的值并非如此,则需要手动像配置中心加入配置service.vgroup-mapping=default
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

第四步:验证分布式事务提交及回滚

​ 通过idea工具,发起rest请求测试分布式事务正常提交以及异常失败回滚的情况,可以通过打断点的方式观察三张事务表的数据变化。如:
在这里插入图片描述

请求参数:

{
    "userId":"1",
    "commodityCode":"C201901140001",
    "name":"fan",
    "count":50,
    "amount":"100"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号