下单问题分析及解决方式|学习笔记

简介: 快速学习下单问题分析及解决方式

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)下单问题分析及解决方式】学习笔记,与课程紧密联系,让用户快速学习知识。

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


下单问题分析及解决方式


本节分析在完成综合案例两大功能时有哪些值得关注的问题。

先来查看下单时存在哪些问题,观察流程图

image.png

首先用户发起下单请求到达后台系统然后后台系统接收到用户请求后进行扣减库存,再进行使用优惠券,进行余额的使用,再进行订单的确认。

image.png

根据基本流程的分析如果在最后确认订单时发生了异常,那么之前扣减的库存优惠券余额都要还原。

image.png

观察下面时序图,详细描述了下单全部流程。用户下单后在下单系统,订单系统接收到订单请求后调用订单服务完成下单。

订单服务先进行订单校验,校验订单参数查看是否合法,然后生成预订单,该订单对于用户不可见,然后再通过 rpc方式调用库存方式减库存,调用优惠券扣减优惠券,再调用用户服务完成扣减余额。操作无误后进行第六步,将上述生成的预订单进行确认,将状态改为可见。

以上就是基本流程,但是如果在确认订单时发生异常如何保证回退?在此处再通过 RPC 方式再调用三个服务会造成用户响应时间变长,在既想保证数据回退,又要保障快速处理。

最好的解决方式是使用消息服务:如果 catch 到异常,在订单服务中给 MQ 发送订单确认失败消息,这三个服务分别去监听 MQ 中有没有确认订单失败消息。如果监听到就完成自己的回退操作:回退库存、回退优惠券、回退余额。

此处订单服务也监听消息,若有确认订单失败,就将刚才生成的订单设置为取消。这样通过 MQ 很好的处理了现在的问题,保证了数据的完整性。

以上就是下单时需要关注的问题以及问题基本的解决方案:通过 MQ 保障数据的完整性。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5月前
|
NoSQL Redis
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
128 0
|
6月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_118 消费者下单频率
「SQL面试题库」 No_118 消费者下单频率
|
6月前
|
消息中间件 存储 NoSQL
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
382 0
|
Android开发 Python
简单步骤比别人抢红包quickly一步
简单步骤比别人抢红包quickly一步
|
SQL 前端开发 NoSQL
谈一谈大厂都怎么防止重复下单?
谈一谈大厂都怎么防止重复下单?
|
SQL Web App开发 BI
高并发-【抢红包案例】之二:使用悲观锁方式修复红包超发的bug
高并发-【抢红包案例】之二:使用悲观锁方式修复红包超发的bug
104 0
|
SQL 监控 NoSQL
高并发-【抢红包案例】之三:使用乐观锁方式修复红包超发的bug
高并发-【抢红包案例】之三:使用乐观锁方式修复红包超发的bug
146 0
|
消息中间件 RocketMQ 开发者
下单异常问题演示|学习笔记
快速学习下单异常问题演示
108 0
下单异常问题演示|学习笔记
|
消息中间件 监控 数据处理
支付回调问题分析和解决方式|学习笔记
快速学习支付回调问题分析和解决方式
509 0
支付回调问题分析和解决方式|学习笔记