RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)

需求背景:
模拟下单场景:首先去在自己的本地创建一条下单记录,同时,还要去调用库存服务,执行减库存操作。

这里演示一个客户下订单的流程服务来为小伙伴们进一步了解一下分布式事务到底如何使用?
首先,我会把系统模块中,开发订单需求;然后,再创建一个库存的子模块,最后,客户端发起订单请求,系统模块接收到请求后,在本地数据库中创建一个。

文章目录

          • 一、数据库部分
            • 1. 订单表创建
            • 2. 库存数据库创建
            • 3. 库存表结构初始化
            • 4. 添加依赖
          • 二、订单微服务代码部分
            • 2.1. 创建实体类
            • 2.2. 创建接口类
            • 2.3. 调整控制层逻辑
            • 2.4. 修改配置文件
          • 三、库存微服务代码部分
            • 3.1. 创建实体类
            • 3.2. 接口库存Dao
            • 3.3. 容错代码
            • 3.4. 控制层逻辑调整
            • 3.5. 配置文件修改
            • 3.6. 初始化库存
            • 3.7. 容错代码简述
          • 四、测试验证
            • 4.1. 启动服务
            • 4.2. 发起第一轮请求
            • 4.3. 抛出异常
            • 4.4. 异常信息监控
            • 4.5. 流程梳理
            • 4.6. 数据库验证
            • 4.7. 发起第二轮请求
            • 4.8. 发起第三轮请求
            • 4.9. 数据库数据验证
            • 4.10. 发起第四轮请求
            • 4.11. 数据库验证

一、数据库部分
1. 订单表创建

在系统模块连接的,ry-cloud数据库中创建一张订单表 和 AT模式seata需要用到的undolog表,其中undo_log表,在前面已经创建过了

create table order_tb
(id int auto_incrementprimary key,user_id int not null,product_id int not null
);CREATE TABLE `undo_log` (`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',`xid` varchar(100) NOT NULL COMMENT 'global transaction id',`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` longblob NOT NULL COMMENT 'rollback info',`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` datetime(6) NOT NULL COMMENT 'create datetime',`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AT transaction mode undo table';
2. 库存数据库创建

创建ry-stock数据库
在这里插入图片描述

3. 库存表结构初始化
```bash
create table stock
(id int auto_incrementprimary key,count int not null,product_id int not null
);CREATE TABLE `undo_log` (`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',`xid` varchar(100) NOT NULL COMMENT 'global transaction id',`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` longblob NOT NULL COMMENT 'rollback info',`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` datetime(6) NOT NULL COMMENT 'create datetime',`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AT transaction mode undo table';
4. 添加依赖

系统模块

 <!--Lombok引入--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
二、订单微服务代码部分

我们对现在的order-serv订单服务基础上调整

2.1. 创建实体类
2.2. 创建接口类
2.3. 调整控制层逻辑
2.4. 修改配置文件
三、库存微服务代码部分
3.1. 创建实体类
3.2. 接口库存Dao
3.3. 容错代码
3.4. 控制层逻辑调整
3.5. 配置文件修改
3.6. 初始化库存
3.7. 容错代码简述
四、测试验证
4.1. 启动服务
4.2. 发起第一轮请求
4.3. 抛出异常
4.4. 异常信息监控
4.5. 流程梳理
4.6. 数据库验证
4.7. 发起第二轮请求
4.8. 发起第三轮请求
4.9. 数据库数据验证
4.10. 发起第四轮请求
4.11. 数据库验证

改之前配置

# spring配置
spring: redis:host: localhostport: 6379password: 123456datasource:druid:stat-view-servlet:enabled: trueloginUsername: adminloginPassword: 123456dynamic:druid:initial-size: 5min-idle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20filters: stat,slf4jconnectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000datasource:# 主库数据源master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456# 从库数据源# slave:# username: # password: # url: # driver-class-name: # seata: true    # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭# seata配置
seata:# 默认关闭,如需启用spring.datasource.dynami.seata需要同时开启enabled: false# Seata 应用编号,默认为 ${spring.application.name}application-id: ${spring.application.name}# Seata 事务组编号,用于 TC 集群名tx-service-group: ${spring.application.name}-group# 关闭自动代理enable-auto-data-source-proxy: false# 服务配置项service:# 虚拟组和分组的映射vgroup-mapping:ruoyi-system-group: defaultconfig:type: nacosnacos:serverAddr: 127.0.0.1:8848group: SEATA_GROUPnamespace:registry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848namespace:# mybatis配置
mybatis:# 搜索指定包别名typeAliasesPackage: com.ruoyi.system# 配置mapper的扫描,找到所有的mapper.xml映射文件mapperLocations: classpath:mapper/**/*.xml# swagger配置
swagger:title: 系统模块接口文档license: Powered By ruoyilicenseUrl: https://ruoyi.vip

调整之后配置

# spring配置
spring: redis:host: localhostport: 6379password: 123456datasource:druid:stat-view-servlet:enabled: trueloginUsername: adminloginPassword: 123456dynamic:druid:initial-size: 5min-idle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20filters: stat,slf4jconnectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000datasource:# 主库数据源master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456# 从库数据源# slave:# username: # password: # url: # driver-class-name: seata: true    # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭# seata配置
seata:# 默认关闭,如需启用spring.datasource.dynami.seata需要同时开启enabled: true# Seata 应用编号,默认为 ${spring.application.name}application-id: ${spring.application.name}# Seata 事务组编号,用于 TC 集群名tx-service-group: order-service# 关闭自动代理enable-auto-data-source-proxy: false# 服务配置项service:# 虚拟组和分组的映射vgroup-mapping:ruoyi-system-group: defaultconfig:type: nacosnacos:serverAddr: 127.0.0.1:8848group: SEATA_GROUPnamespace: publicuserName: "nacos"password: "nacos"registry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace: publicuserName: "nacos"password: "nacos"# mybatis配置
mybatis:# 搜索指定包别名typeAliasesPackage: com.ruoyi.system# 配置mapper的扫描,找到所有的mapper.xml映射文件mapperLocations: classpath:mapper/**/*.xml# swagger配置
swagger:title: 系统模块接口文档license: Powered By ruoyilicenseUrl: https://ruoyi.vip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Tablestore多元索引打造亿量级店铺搜索系统

一、方案背景 对于一套GEO管理系统&#xff0c;其核心点与瓶颈在于数据库的存储性能与查询能力&#xff1b;一方面&#xff0c;存储服务需要应对海量数据的低延迟存、读&#xff0c;另一方面&#xff0c;存储服务也要提供高效的GEO多维度数据检索。表格存储&#xff08;TableS…

Java中的序列化与反序列化机制

文章目录一、序列化的定义二、为什么需要序列化呢&#xff1f;三、如何序列化四、案列实现4.1、将对象序列化位二进制流4.2 将序列化后的二进制流反序列化为对象五、总结一、序列化的定义 &#x1f4a1; 所谓的序列化就是将Java 中的对象转换成一种流的形式&#xff08;二进制…

今天起,我们喝的百年牛奶要变了!

一天从一杯光明奶开始&#xff0c;是很多小伙伴的日常&#xff1a;牛奶下肚&#xff0c;醇厚、香甜的奶味仍余舌尖。如今&#xff0c;这家百年老字号正在不断焕发新能量。 今天&#xff0c;光明乳业与阿里云达成战略合作。双方将整合优质资源&#xff0c;形成聚合效应&#xf…

Spring 从入门到入土——AOP 就这么简单!| 原力计划

作者| 冢狐责编 | 夕颜出品 | CSDN博客什么是AOP&#xff1f;面向切面编程&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff…

RuoYi-Cloud 进阶篇_03( Seata 高可用集群与 NacosConfig配置中心整合)

文章目录1. 创建文件config.txt2. 创建nacos-config.sh3. 配置导入nacos配置中心4. 配置验证1. 创建文件config.txt 在seata的安装文件夹下创建文件config.txt [rootnode2 ~]# cd /app/seata/seata-server-1.4.2/ [rootnode2 seata-server-1.4.2]# vim config.txt 说明&#…

基于 Tracing 数据的拓扑关系生成原理

背景 随着互联网架构的流行&#xff0c;越来越多的系统开始走向分布式化、微服务化。如何快速发现和定位分布式系统下的各类性能瓶颈成为了摆在开发者面前的难题。借助分布式追踪系统的调用链路还原能力&#xff0c;开发者可以完整地了解一次请求的执行过程和详细信息。但要真…

一条命令导出MySQL表结构xls

文章目录&#x1f331;介绍&#x1f337;一、先尝鲜&#x1f498;二、导出失败的看过来&#x1f412;三、原理&#x1f437;总结&#x1f331;介绍 &#x1f337;一、先尝鲜 &#x1f343;执行下面SQL语句&#xff0c;将会发生神奇的事情&#x1f601; SELECT 字段名称,数据…

揭秘2019双11背后的云网络 – 双11网络架构和洛神系统

图1 天猫双11成交额 2019年天猫双11成交额&#xff0c;2684亿&#xff01;核心系统100%上云&#xff01;全球最大流量洪峰&#xff0c;阿里云扛住了。 狂欢背后的技术栈 网上轻松购物体验实际上是背后复杂的技术组成的&#xff0c;这是一个简化的通用电商系统架构&#xff0…

拿专属内推码!一汽-大众专场直播招聘来了

作者 | 张红月出品 | CSDN遇见OFFER开学即毕业毕业即失业线下宣讲招聘统统被按下了暂停键迷茫&#xff0c;焦虑&#xff0c;惶恐而HR却说&#xff0c;今年招人太难了腾讯总监甚至路边摆摊招聘2020年各大企业纷纷开启线上模式CSDN作为深受开发者喜爱的社区以用户为本特开设遇见O…

vmware workstation 12 打开vm18 不兼容问题解决

由于需要让别人给我发了一下xp系统的虚拟机&#xff0c;可是打开后&#xff0c;却显示&#xff1a;配置文件“”是由VMware产品创建&#xff0c;但该产品与此版VMware workstations 不兼容&#xff0c;因此无法使用。 解决方案&#xff1a; 分析&#xff1a; 出现这种情况主要…

阿里云开源 image-syncer 工具,容器镜像迁移同步的终极利器

为什么要做这个工具&#xff1f; 由于阿里云上的容器服务 ACK 在使用成本、运维成本、方便性、长期稳定性上大大超过公司自建自维护 Kubernets 集群&#xff0c;有不少公司纷纷想把之前自己维护 Kubernetes 负载迁移到阿里云 ACK 服务上。在迁移过程中&#xff0c;往往会碰到一…

短网址系统设计与实战

&#x1f3a8;领域&#xff1a;Java后端开发&#x1f525;收录专栏&#xff1a; 系统设计与实战 &#x1f412;个人主页&#xff1a;BreezAm &#x1f496;Gitee&#xff1a;https://gitee.com/BreezAm ✨个人标签&#xff1a;【后端】【大数据】【前端】【运维】 文章目录&am…

“我,懂数据,不怕被裁”:这项核心能力到底有多香?

我见过市面上很多的 Python 讲解教程和书籍&#xff0c;他们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0…

RuoYi-Cloud 登陆 /code 获取验证码出错

文章目录1. 异常信息2. 分析定位3. 解决方案1. 异常信息 [网关异常处理]请求路径:/code,异常信息:Invalid value ‘KaptchaTextCreator’ for config parameter ‘kaptcha.textproducer.impl’. 2. 分析定位 如果不修改包名的话&#xff0c;默认不会出现此问题&#xff0c;…

谁顶住双11的世界级流量洪峰?神龙架构负责人等9位大牛现场拆解阿里秘籍

阿里江湖中&#xff0c;很多资源和技术&#xff0c;如神龙服务器、OceanBase、POLARDB等等&#xff0c;在开源、自研、云这三架马车上形成协同效应&#xff0c;既是内功也是武器。 “不是任何一朵云都能撑住这个流量。中国有两朵云&#xff0c;一朵是阿里云&#xff0c;一朵叫…

如何回答性能优化的问题,才能打动阿里面试官?

阿里妹导读&#xff1a;日常工作中&#xff0c;我们多少都会遇到应用的性能问题。在阿里面试中&#xff0c;性能优化也是常被问到的题目&#xff0c;用来考察是否有实际的线上问题处理经验。面对这类问题&#xff0c;阿里工程师齐光给出了详细流程。来阿里面试前&#xff0c;先…

RuoYi-Cloud [网关异常处理]请求路径:/code,异常信息:null

文章目录1. 现象2. 分析定位3. 解决方案1. 现象 nacos配置文件中有值&#xff0c;但是代码初始化时未赋上值 2. 分析定位 既然nacos已经配置了&#xff0c;获取不到只能存在二种情况&#xff0c; 第一种&#xff1a;获取的不是最新的nacos的配置 第二种&#xff1a;没有…

这 10 行比较字符串相等的代码给我整懵了,不信你也来看看

来源 | 程序猿石头责编 | Carol 封图 | CSDN 下载自视觉中国先直接上代码&#xff1a;boolean safeEqual(String a, String b) {if (a.length() ! b.length()) {return false;}int equal 0;for (int i 0; i < a.length(); i) {equal | a.charAt(i) ^ b.charAt(i);}return …

SpringBoot整合websocket实现及时通信聊天

&#x1f3a8;领域&#xff1a;Java后端开发&#x1f525;收录专栏&#xff1a; 系统设计与实战 &#x1f412;个人主页&#xff1a;BreezAm &#x1f496;Gitee&#xff1a;https://gitee.com/BreezAm ✨个人标签&#xff1a;【后端】【大数据】【前端】【运维】 文章目录&am…

2019双11,支付宝有哪些“秘密武器”?

2019双11&#xff0c;支付宝参战的第十一年。 与十一年前相比&#xff0c;双11的许多东西都改变了。比如金额——2684亿&#xff0c;差不多是十一年前的5000倍&#xff1b;比如流量——订单峰值54.4万笔/秒&#xff0c;曾经是想都不敢想的数字&#xff1b;再比如层出不穷的新技…