订单超时-延时任务处理
1、定时任务
时效性差,会有一定的延迟,这个延迟时间最大就是每隔一定时间的大小,如果你设置每分钟定时轮询一次,那么理论上订单取消时间的最大误差就有一分钟,当然也可能更大,比如一分钟之内有大量数据,但是一分钟没处理完,那么下一分钟的就会顺延。效率低。对数据库的压力比较大。
2、被动取消
这种方式依赖于用户的查询操作触发,这也就是说如果用户不进行查询订单的操作,该订单就永远不会被取消。不会取消的订单,也就可能意味着库存可能被占用,也可以是被动取消 +定时任务的这种组合实现方式。这种情况下定时任务的时间可以设置的稍微“长“一点。
缺点:
会产生额外影响,比如统计,订单数,库存等产生影响。
影响用户体验,用户打开订单列表可能要处理大量数据,影响显示的实时性。
3.延时消息
针对时间轮算法或者说延时消息,目前有很多消息队列都支持,
比如 RocketMQ,RabbitMQ
- 死信队列: TTL消息的存活时间、DLX即死信交换机
- 时间轮:
12:00:00 时启动定时器。 插入任务「12:41:00」时,处理为 c(环数) = (12:41:00 - 12:00:00)/60 - 0 = 41,k(slot key) = (12:41:00 - 12:00:00)%60 - 0= 0;
每一个执行周期到对应的 slot 时,该 slot 对应的链表中所有节点剩余轮数-1 执行到 12:19:01 时,时间轮情况如下:
一个1天的定时器,时间轮分为3个,小时轮(24 slot)、分钟轮(60 slot)、秒轮(60 slot) 方便理解
4、延时队列
DelayQueue必须实现 Delayed 接口的
JDK 中提供了一组实现延迟队列的API,位于Java.util.concurrent包下DelayQueue。
DelayQueue是一个BlockingQueue(无界阻塞)队列,
它本质就是封装了一个PriorityQueue(优先队列),PriorityQueue内部使用完全二叉堆来实现队列元素排序。
在向DelayQueue队列中添加元素时,会给元素一个Delay(延迟时间)作为排序条件,队列中最小的元素会优先放在队首。
队列中的元素只有到了Delay时间才允许从队列中取出。
队列中可以放基本数据类型或自定义实体类,在存放基本数据类型时,优先队列中元素默认升序排列,自定义实体类就需要我们根据类属性值比较计算了。
5、Redis 缓存
zset是一个有序集合,每一个元素(member)都关联了一个 score,通过 score 排序来取集合中的值。我们将订单超时时间戳与订单号分别设置为 score 和 member。系统扫描第一个元素判断是否超时。
订单超时-延时任务处理相关推荐
- 延时任务处理订单超时方案(非定时)
在开发中,往往会遇到一些关于延时任务的需求.例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么这里就会产生一个问题 ...
- 拼夕夕订单超时未支付自动关闭实现方案!
" 在开发中,往往会遇到一些关于延时任务的需求.例如:生成订单 30 分钟未支付,则自动取消:生成订单 60 秒后,给用户发短信. 对上述的任务,我们给一个专业的名字来形容,那就是延时任务. ...
- ribbonmq超时配置_使用RabbitMQ实现订单超时取消(延迟队列)
使用RabbitMQ实现订单超时取消,大致流程: 生产者生产一条设置了TTL的延迟取消订单消息=>延迟队列交换机(通过绑定路由键)=>消息投递至延迟队列=>消息延迟队列时间到期=&g ...
- 订单超时自动取消3种方案——我们用这种!
大家好,大家对电商购物应该都比较熟悉了,我们应该注意到,在下单之后,通常会有一个倒计时,如果超过支付时间,订单就会被自动取消. 下单 今天,我们来聊聊订单超时未支付自动取消的几种方案. 1.定时任务 ...
- 订单超时未支付的解决方案
订单超时未支付的解决方案 定时任务实现 被动取消 JDK的延迟队列 代码演示 时间轮算法 代码演示 Redis zset 实现延迟任务 代码演示 MQ 延时消息 代码演示 写在最后 在前面的文章 第三 ...
- 秒杀活动,提高性能,防止超卖,订单超时
目录 初步思考 秒杀活动 订单防止超卖 订单超时如何处理 初步思考 原文地址 前端:页面尽可能静态化,css/js合并,减少请求数 扩容:增加机器,提高处理请求能力 限流:应用限流(nginx,tom ...
- DelayQueue延迟任务队列----实现订单超时修改订单状态处理,复制即用
其实实现这种功能的方式有很多种MQ,Redis,以及DelayQueue,也是比较常见的. 如果完全没啥要求,而且服务器配置又好,也不在乎有没有空隙,那还可以采用定时任务做处理,直接定时刷数据库,但是 ...
- 订单超时未支付自动取消5种实现方案
大家好,我是宝哥! 前言 在开发中,往往会遇到一些关于延时任务的需求.比如最近大家都在忙抢回家的火车票,当你下了一个订单没有支付时,会有一个倒计时,提示你半小时之内支付,否则会自动取消.这样的场景是如 ...
- 订单超时处理方案介绍
在电商场景下,一个订单流程中有许多环节要用到超时处理,包括但不限于: 买家超时未付款:比如超过15分钟没有支付,订单自动取消. 商家超时未发货:比如商家超过1个月没发货,订单自动取消. 买家超时未收货 ...
最新文章
- Pytorch Bi-LSTM + CRF 代码详解
- 北航学长:DCIC 2021的算法方案讲解
- graphpad柱状图怎么加图例_如何用Graphpad prism添加多个图例
- C++与JAVA语言区别
- vs mfc数据与控件绑定错了_如何进行数据趋势分析?VS扩展工具——C1迷你图控件了解一下...
- gitolite 踩坑记
- js导出的xlsx无法打开_vue将数据导出为excel文件就是如此简单
- python写整数逆位运算_位运算
- 简单十步python使用django框架建立博客网站
- 30位中外大师的摄影箴言
- 焊武帝再爆肝造CPU,软硬件全自研,可玩游戏,基础器件成本不到1000元
- 应对当今的医疗器械软件测试开发挑战,如何选择测试软件
- 网页自动关机代码HTML,电脑如何自动关机
- 计算机usb口不识别读卡器,windows7系统下usb读卡器读不出来如何解决
- [Magento] Overriding Core files
- Lenovo Thinkpad T400在BIOS中开启VT虚拟化后无法生效?
- 怎么使用PluginBase进行Tekla二次开发
- Spring笔记——装配Bean
- 网银测试软件,光大银行网盾检测工具
- HTML CSS游戏官网网页模板 仿绝地求生吃鸡游戏网站 大学生游戏介绍网站毕业设计 DW游戏主题网页模板下载