赞
踩
本教程主要是通过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运行环境为win10、jdk8、git、mysql5.6+、nacos1.4.0、seata1.4.0
本地演示单机模式启动,即解压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分布式事务是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端业务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"
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。