目录
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/
二、环境准备
资源下载:
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
第二步:启动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
第三步:依次启动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
第四步:验证分布式事务提交及回滚
通过idea工具,发起rest请求测试分布式事务正常提交以及异常失败回滚的情况,可以通过打断点的方式观察三张事务表的数据变化。如:

请求参数:
{
"userId":"1",
"commodityCode":"C201901140001",
"name":"fan",
"count":50,
"amount":"100"
}

本文详细介绍了如何从零开始搭建Seata分布式事务系统,包括Nacos注册中心的启动、Seata Server的配置与启动,以及客户端应用服务的配置与启动。通过SpringBoot、Dubbo和Mybatis的整合,展示了如何利用Seata进行分布式事务管理。同时,提供了验证事务提交与回滚的步骤,帮助读者深入理解Seata的工作原理。
889

被折叠的 条评论
为什么被折叠?



