企业中订单超时关闭是怎么做的?我说用延迟消息,面试官让我回去等消息?

news2025/1/12 22:55:24

文章目录

  • 背景
  • 时序图
  • 方案对比
    • 方案一 被动关闭
    • 方案二 定时关闭
    • 方案三 Rocket MQ延迟消息
  • 总结

背景

订单超时未支付是电商中的一个核心场景,当用户创建订单后,超过一定时间没有支付,平台需要及时将该订单关闭。需要关闭的主要原因有以下几个:

  1. 提高交易效率:自动取消未支付的订单可以迅速释放被锁定的商品库存,商品能重新上架销售,提高商品周转率和销售效率。
  2. 优化用户体验:对于消费者而言,自动退款减少了手动取消的操作步骤,提升了购物体验。
  3. 管理库存准确性:避免因长时间占用库存而导致的真实库存与系统显示不符,减少因库存问题引发的订单履行错误。
  4. 防止恶意下单:防范恶意用户通过大量下单但不支付来占用商品库存,干扰正常销售。
  5. 资金流动与会计清晰:自动退款有助于电商平台和卖家及时处理财务事务,明确账目,避免长期挂账带来的财务管理复杂性。

时序图

增加时序图的原因是为了更好的理解后续各个方案的优缺点,另外是可以看的更清晰,便于理解。我们的场景是用户没有做完成支付这个步骤,也就是下图右侧的流程。
image.png

方案对比

方案一 被动关闭

主要看红框中的内容,与上方时序图的区别

被动关闭简单说就是依赖用户。这个方案在用户每次访问订单详情时,在订单详情接口中进行逻辑判断,支付是否超时,超时则关闭订单。时序图如下:
image.png
这个方案的优点只有一个,那就是不用开发自动关单的功能,只要查询订单详情接口加一些逻辑即可。缺点确实有很多:

  1. 用户永远不过来点详情:这种情况订单就会一直处于待支付的状态,相当恐怖兄弟,相当于有一个库存一直被锁着。
  2. 查询接口变得不单一:查询订单详情是一个查询接口,如果处理超时未支付时,就会引入写操作,个人认为是不太合适的

方案二 定时关闭

主要看红框中的内容,与上方时序图的区别

定时关闭一般都是通过xxl-job(分布式调度平台)来实现的。处理的逻辑是:

  1. 定时任务查询超时未关闭的订单(注意这里扫出来的订单全部都需要关闭,后续与MQ关单方案对比
  2. 订单服务只返回订单号列表(只返回订单号,不用回表)
  3. 遍历订单号列表,发送关单MQ消息

image.png
定时任务关闭个人非常推荐,非大厂的情况下,这个方案感觉是最优方案。原因是:

  1. 大部分公司的订单里其实并不大
  2. 超时不支付的订单非常少,大家想想自己买了不想要的东西是不是会立即点取消支付
  3. 查询的时候有索引,不回表
  4. 订单量中等的情况,可以读写分离,扫从库不会对业务造成影响

但是定时任务扫表的缺点也是有的:

  1. 性能瓶颈与资源消耗:这种场景在扫主库的前提下是有影响的,集中式的查询一堆数据,会占用数据大量的IO资源,由于读写共享的是一个主库,集中式的读会让数据库的响应变慢,肯定对业务是有影响的
  2. 实时性问题:简单说就是没办法保证及时的退款。假设超时未支付的时间是30分钟,但是定时任务5分钟跑一次,也就是说这个单子可能在下单30~35分钟后执行退款,与我们期望的下单后30分钟退款不一致

人非常推荐使用该实现方案,原因很简单实时性的问题我们可以改成1分钟,缩短定时任务的频率;资源消耗的问题在超时单量不是特别多的情况下,其实产生的影响不大,这个场景扫的不是全表。

方案三 Rocket MQ延迟消息

主要看红框中的内容,与上方时序图的区别

目前MQ最常见时RocketMQ,所以消息队列以RocketMQ为例,像RabbitMQ也有类似的功能死信队列这里不展开讨论。处理的逻辑是:

  1. 下单后异步发送延迟消息
  2. 延迟消息到延迟时间,消息投递到队列,消费者此时可以拉到该消息
  3. 判断订单是否完成支付,完成这不需要任何处理

image.png
Rocket MQ的好处是可用性非常高,RocketMQ本身有重试机制,能保证消息失败后的重试。从实际情况看,不是高峰的情况下,基本不会出现消息消费失败的情况。但是这个方案有个明显的缺点是有大量无效的调度,可以看到这个方案所有的订单都会去发送一个延迟消息,但是实际场景100个订单都不一定有一个超时未支付的订单。

总结

以上方案算是比较常见的方案,还有其他方案比如JDK自带的内存队列,Redis过期监听等大家可以去看看。以上方案个人推荐方案二定时任务,具体采用那种方案还是要根据业务情况来,毕竟技术是为了赋能业务,能解决问题就行,做完比完美更重要。

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

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

相关文章

初中英语优秀作文分析-005How to Plan Our Life Wisely-如何明智地规划我们的生活

PDF格式公众号回复关键字:SHCZYF005 记忆树 1 The “double reduction policy” reduces the burden on students and offers us more spare time than before, but how to plan our life wisely? 翻译 “双减政策”减轻了学生的负担,给了我们比以前更多的业余…

预备资金有5000-6000买什么电脑比较好?大学生电脑选购指南

小新pro14 2024 处理器:采用了英特尔酷睿Ultra5 125H或Ultra9 185H两种处理器可选,这是英特尔最新的高性能低功耗处理器,具有18个线程,最高可达4.5GHz的加速频率,支持PCIe 4.0接口,内置了强大的ARC核芯显卡…

Windows Update Blocker 完全禁用或启用Windows系统上的自动更新,一键阻止,无需额外操作!

你是否曾因为突如其来的系统更新而感到手忙脚乱?Windows Update Blocker v1.8让你只需一键,即可完全禁用或启用Windows系统上的自动更新,不需要任何的额外操作,只需要打开软件,点击应用即可关闭Windows系统上的自动更新…

DVWA-CSRF-samesite分析

拿DVWA的CSRF为例子 接DVWA的分析,发现其实Impossible的PHPSESSID是设置的samesite1. 参数的意思参考Set-Cookie SameSite:控制 cookie 是否随跨站请求一起发送,这样可以在一定程度上防范跨站请求伪造攻击(CSRF)。 下面用DVWA CS…

[案例]国家数据局:首批“数据要素×”典型案例深度解析系列之五

“ 通过示范引领,激励多方主体积极参与,释放数据要素价值。” 本文为“数据要素”典型案例深度解析系列的第五篇,前四篇请见 [案例]国家数据局:首批“数据要素”典型案例深度解析系列之一 [案例]国家数据局:首批“数…

微信小程序入门2

微信开发者工具的安装方法 1.打开微信开发者工具下载页面 在微信小程序管理后台的左侧边栏中选择“开发工具”,然后选择“开发者工具”,即可找到微信开发者工具的下载页面。 2.打开微信开发者工具的下载链接页面 单击“下载” 按钮下载,即…

【网络安全的神秘世界】已解决burpsuite报错Failed to start proxy service on 127.0.0.1:8080

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 解决burpsuite无法在 127.0.0.1:8080 上启动代理服务端口被占用以及抓不到本地包的问题 Burpsuite无法启动proxy…

深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之二,数据的预处理)

数据的预处理(Data Preprocessing) 2 Data Preprocessing数据的预处理 数据预处理的几种方法 2,1 数据的零点中心化 数据的零点中心化的目的就是为了把数据的整体分布拉回到原点附近,也就是让数据的整体均值变为0。 ​ 2,2 数据的标准化 数据…

VS Code Arduino编程

①Arduino Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。 ②VS Code(全称 Visual Studio Code) 是由微软开发的一款开源、轻量级的跨平台现代代码编辑器…

PADS学习笔记

1.PADS设计PCB流程 封装库(layout),原理图库(logic)的准备原件封装的匹配(logic)原理图的绘制(logic)导网表操作(logic)导入结构(lay…

一文掌握提升 Python 代码质量的最佳伴侣工具:black、isort、flake8 和 mypy

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 在 Python 项目开发中,为了保持代码质量和提高开发效率,我们常需借助一些工具。今天,我将为大家介绍四个 Python 代码工程的得力助手:black、isort、flak…

风险评估概念

渗透服务只是风险评估的一种内容 风险评估的概念 是识别,控制,降低,或者消除可能影响到信息系统的安全风险过程。 风险评估的定义: 就是量化测评一种事情带来的影响,整个量化的过程是偏主观化(客户觉得) 风险的特…

AI 开发平台(Coze)搭建小游戏《挑战花光10亿》

前言 本文讲解如何从零开始,使用扣子平台去搭建一个小游戏 这是成品链接:挑战花光10亿 - 扣子 AI Bot (coze.cn) 欢迎大家去体验一下 效果 正文 什么是coze平台? 扣子(Coze)是字节跳动推出的一站式 AI 开发平台&am…

(4) cmake编译静态库和动态库

文章目录 静态库整体代码动态库编译整体代码执行结果(静态) 静态库整体代码 static.h #pragma onecevoid static_demo();static.cpp #include "static.h" #include <iostream>void static_demo(){std::cout<<"static demo"<<std::end…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-26网络中的网络NiN

26网络中的网络NiN import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个NiN块 def nin_block(in_channels, out_channels, kernel_size, strides, padding):return nn.Sequential(# 传统的卷积层nn.Conv2d(in_channels, ou…

个人成长的利器:复盘教你如何避免重蹈覆辙

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 最近忙着学习和工作&#xff0c;更新比较少&#xff0c;期间一直在思考如何才能快速…

BLDC无感控制策略

本文根据 BLDC 的电路模型推导了一个简 化磁链方程来估计转子位置,转速适用范围较 广;重点分析了反电动势和换相电流对转矩脉动 的影响;设计了一种BLDC的无速度传感器高速 驱动控制方案。通过试验验证了新型控制策略 的性能。 1 低速时的转子位置检测 图1 为高速无刷直流电…

高职人工智能专业实训课之“图像识别基础”

一、前言 随着人工智能技术的迅猛发展&#xff0c;高职院校对人工智能专业实训课程的需求日益迫切。唯众人工智能教学实训平台作为一所前沿的教育技术平台&#xff0c;致力于为学生提供高效、便捷的人工智能实训环境&#xff0c;特别在“图像识别基础”这一关键课程中&#xf…

四川汇聚荣科技有限公司怎么样?

在探讨一家科技公司的综合实力时&#xff0c;我们往往从多个维度进行考量&#xff0c;包括但不限于公司的发展历程、产品与服务的质量、市场表现、技术创新能力以及企业文化。四川汇聚荣科技有限公司作为一家位于中国西部的科技企业&#xff0c;其表现和影响力自然也受到业界和…

从零开始使用Surya-OCR——检测后的精细化处理框1:降噪二值图下的空白检测框删除

目录 一、动机 二、降噪二值化处理 1.一般二值化处理 2.降噪二值化处理 三、图片区域空白框判断 1.计算区域黑色像素比重 2.设置阈值筛选空白区域 3.可视化检查结果 一、动机 在使用 Surya 检测文本框时,对于一些特殊的文本,尤其是中文的古籍等,存在检测不准确的问题。常常…