当前位置: 首页 > news >正文

RabbitMQ实现异步下单与退单

前言:

在电商项目中的支付模块也是一个很重要的模块,其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单,也就是第三方支付、数据库扣减、积分增加、等等其他业务操作,等待全部执行完毕后向用户返回成功响应请求。对于小体量系统那么是可以的,但是随着项目的扩大,后续下单中可能会添加新的业务,那么一整个下订的业务流程可能就会变得很长,增加了响应的时间,那么此时对于用户的体验来说肯定是不好的。所以就需要将同步下单改为异步下单来提高用户的体验。


首先就是同步下单改为异步下单流程:

起始同步下单也就是在下订方法中还需要涉及很多的业务操作,比如库存扣减、订单积分写入等等,那么当一个用户下单后就需要等待这些操作全部完成才会返回正常的结果,那么在系统繁忙的时候可能整个流程消耗的时间会比较长,对于用户来说那么体验肯定是不好的。

异步下单:

异步下单就是可以将上述的很多操作,比如积分写入等等操作通过MQ进行异步消费处理。那么就可以提高响应速度,来提升用户体验。

但整个下单的核心无论是同步还是异步,最为重要的步骤肯定是库存的扣减与检查。

那么整个下单流程应该就如下:

用户下单

检查对应商品库存(Redis)

库存充足则对Redis中的库存进行扣减(Lua)

然后数据库的扣减交由MQ进行异步消费扣减。

以及其他业务操作等设计各个表插入都可以交由MQ进行异步消费。

退订(退款)处理:

如果一个下订业务要包括这么多业务处理,当一个用户下单后执行了第三方支付扣减、缓存数据扣减、异步数据库扣减等等,那么假设用户下订完毕后,突然发现买错了,然后在短时间内立马又退订,而此时之前已经成功下订并将异步消息在MQ中进行处理,而此时消息已经在MQ中了,该如何解决与退订的各种数据退回操作。

情况一:

下订后的异步任务在MQ中还没有消费、退订的各种操作先执行。这种情况就是用户刚下订没多久后立即退订会产生,而正常的退订是说用户可能在到货后退货处理等几天后才进行退订,那么这种业务一般不会出现这种情况

思路:关键信息就是订单号 以及订单标识;

正常业务来讲应该订单表和退订表是两个表。

那么一个订单所有的步骤全部执行完毕后就会写入到订单表中,那么此时根据退订ID就可以先去订单表中查询这个订单是否已经完成或者查看订单标识(完成了就代表该下订的异步MQ任务全部执行完毕),此时可以执行退订的各种业务反向操作。退订同样可以交由MQ进行异步反向处理,提高用户体验。

如果发现订单表中该订单还未完成,那么就将退订流程通过RabbitMQ的延迟消息进行处理(比如等待30S等;具体时间可以根据业务以及系统进行分析判断),然后进行延迟判断,如果延迟消息处理时发现还未完成则重发消息直到等待订单完成后(此处操作有点类似订单超时取消),再进行退订处理。

http://www.lryc.cn/news/489151.html

相关文章:

  • 鸿蒙NEXT开发案例:随机数生成
  • nwjs崩溃复现、 nwjs-控制台手动操纵、nwjs崩溃调用栈解码、剪切板例子中、nwjs混合模式、xdotool显示nwjs所有进程窗口列表
  • 视觉SLAM--经典视觉SLAM框架
  • Wallpaper壁纸制作学习记录05
  • Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
  • springboot基于微信小程序的食堂预约点餐系统
  • 字符串学习篇-java
  • 2024亚太杯数学建模C题【Development Analyses and Strategies for Pet Industry 】思路详解
  • STM32串口——5个串口的使用方法
  • NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能
  • Ubuntu24.04安装gpfs客户端
  • Android Framework层介绍
  • 如何利用 Puppeteer 的 Evaluate 函数操作网页数据
  • SpringMVC接收请求参数
  • 安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!
  • 蓝桥杯每日真题 - 第18天
  • HTTP 协议应用场景
  • 【Linux庖丁解牛】—Linux基本指令(下)!
  • python: generator model using sql server 2019
  • Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例
  • 深度学习(1)
  • golang 嵌入式armv7l压缩编译打包
  • Makefile 之 join
  • 集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码
  • 北京申请中级职称流程(2024年)
  • ubuntu.24安装cuda
  • unity li2cpp逆向原理是什么?
  • Python网络爬虫实践案例:爬取猫眼电影Top100
  • 卷积神经网络(CNN)中的权重(weights)和偏置项(bias)
  • 华为FusionCube 500-8.2.0SPC100 实施部署文档