下单异常问题演示|学习笔记

简介: 快速学习下单异常问题演示

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)下单异常问题演示】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/703/detail/12424


下单异常问题演示

1、模拟在确认订单时,整个流程扣减完库存,扣减完优惠卷,扣减完余额后,发生异常,订单没有确认成功,但是数据都被扣除,会导致数据的不一致,需要通过 mq 进行处理。

2、//模拟异常抛出

CastException.cast(ShopCode.SHOP_FAIL);

在正式测试之前,先检查数据,把优惠卷还原成未使用。

image.png

商品的库存是999个。

image.png

Trade_goods_number_log 中有下单成功的记录。

image.png

订单成功操作的记录。

image.png

余额是900。

image.png

余额操作的日志。

image.png

有异常后,查看执行结果,可以看到执行成功。

image.png

查看异常信息,订单检查通过,扣减库存成功,使用了优惠卷,扣减余额成功,抛出异常hopCode{success=false,code=0,message='

错误'}

订单没有确认成功。

image.png

可以看到订单里面的 order_status 为0。

image.png

优惠卷被使用。

image.png

库存减1。

image.png

用户余额减少。

image.png

余额有减少记录。

image.png

有库存操作记录。

image.png

没有处理数据的一致性。

privatevoidupdateorderstatus(Tradeorderorder){

order.setorderstatus(ShopCode.SHOPORDER_CONFIRM.

getcode());

order.setPaystatusShopCode.SHOPORDER_PAY_STATUS_NO_PAY.

getcode());

order.setconfirmTime(newDate());

intr=orderMapper.updateByPrimaryKey(order);

if(r<=0){

CastException.cast(ShopCode.SHOP_ORDER_CONFIRM_FAIL);

}

log.info("订单:["+order.getorderId()+"]状态修改成功");

}

3、如果出现异常后,在 catch 中发送异常,确认订单失败的消息,在库存服务,优惠卷服务,用户服务以及订单服务中是否去监听消息,进行数据的回退的处理,保证失败的补偿机制。

相关文章
|
存储 算法 Oracle
极致八股文之JVM垃圾回收器G1&ZGC详解
本文作者分享了一些垃圾回收器的执行过程,希望给大家参考。
|
5月前
|
消息中间件 缓存 监控
MQ消息积压 / Rocketmq 积压 最全的处理方案。 (秒懂+图解+史上最全)
MQ消息积压 / Rocketmq 积压 最全的处理方案。 (秒懂+图解+史上最全)
MQ消息积压 / Rocketmq 积压 最全的处理方案。 (秒懂+图解+史上最全)
|
存储 消息中间件 Java
SpringBoot整合RocketMQ发送延时消息
当消息写入到Broker后,在指定的时长后才可被消费处理的消息,称为延时消息
1558 0
|
弹性计算 缓存 监控
基于“日志审计应用”的 DNS 日志洞察实践
DNS 解析日志是一种记录 DNS 请求和响应的基础信息,监控 DNS 服务可以帮助用户识别网络活动并保持系统安全。日志审计服务支持采集 DNS 内网解析日志、公网权威解析日志、GTM 日志。理解 DNS 日志的字段含义,洞察 DNS 日志背后所代表的网络信息,既可以帮助发现和诊断 DNS 解析相关的问题,还可以检测和识别潜在的安全威胁。
8879 108
|
11月前
|
存储 缓存 安全
分布式系统架构7:本地缓存
这是小卷关于分布式系统架构学习的第10篇文章,主要介绍本地缓存的基础理论。文章分析了引入缓存的利弊,解释了缓存对CPU和I/O压力的缓解作用,并讨论了缓存的吞吐量、命中率、淘汰策略等属性。同时,对比了几种常见的本地缓存工具(如ConcurrentHashMap、Ehcache、Guava Cache和Caffeine),详细介绍了它们的访问控制、淘汰策略及扩展功能。
284 6
|
消息中间件 RocketMQ
如何保证RocketMQ消息有序?
如何保证RocketMQ消息有序?
|
9月前
|
机器学习/深度学习 人工智能 NoSQL
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。
1646 3
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
|
9月前
|
人工智能 自然语言处理 前端开发
20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
本文介绍如何使用Spring Boot3与Vue2快速构建基于DeepSeek的AI对话系统。系统具备实时流式交互、Markdown内容渲染、前端安全防护等功能,采用响应式架构提升性能。后端以Spring Boot为核心,结合WebFlux和Lombok开发;前端使用Vue2配合WebSocket实现双向通信,并通过DOMPurify保障安全性。项目支持中文语义优化,API延迟低,成本可控,适合个人及企业应用。跟随教程,轻松开启AI应用开发之旅!
|
SQL 关系型数据库 MySQL
MySQL DML(数据操作语言)全面指南
MySQL DML(数据操作语言)全面指南