处理未支付订单30分钟后取消方案分析
方案1:统一的定时任务,每隔1分钟执行一次。
缺点:每隔一分钟处理一次,过于频繁的请求,增加服务器的负担。并且会有1分钟的误差,因为定时任务设置每隔1分钟执行一次。
优点:实现简单
方案2:利用mq的延迟发送特性处理+一个定时任务统一处理失败的单子
下单后,发送一条消息给mq,并设置mq,30分钟后再处理发送消息动作
优点:时间准确性相对高,一个单子只执行一次,并发高。
缺点:1.当大量消息堆积的时候,同样存在延迟的问题。同时还可能存在消息丢失风险。(rocketmq号称0丢失)
2.基本上的mq,都是默认不开启延迟发送的,需要开启mq延迟发送功能,且会增加mq的一部分性能负担。
方案3:利用redis的过期key特性处理+一个定时任务统一处理失败的单子
优点:时间准确性相对高,一个单子只执行一次
缺点:1,消息只发送一次,不管有没有处理成功。
2,当很多key同时过期时,存在延迟问题。
3. 当负载多个实例的时候,要保证业务只被执行一次,要保证幂等性,不能重复被执行。
4,redis默认是不开启这个功能的,需要开启redis过期key的监听订阅,会增加redis的一部分性能负担。
方案4:30分钟后处理的定时任务+一个定时任务统一处理失败的单子
当下单后,新建一个30分钟后处理的定时任务
优点:时间准确性高,一个单子只执行一次。
缺点:1,需要再新建一个定时任务,删除处理过,无用的定时任务。
2,并发数,依赖数据库的并发,以xxjob来举例,其实是往数据库插一条定时任务的数据,所以并发受限于数据库并发数。(需要优化插入的过程,比如如何提高插入速度,或者相应的削峰措施等)
上面四种方案,笔者认为在并发度不是特别高的情况下,第二种(rocketmq优先推荐)和第四种方案为较优方案。
现有的分布式定时任务有,xxjob,elasticjob,springjob等。
处理未支付订单30分钟后取消方案分析相关推荐
- java实现订单未支付失效_未支付订单30分钟后,自动取消
未支付订单30分钟后,自动取消 生成订单时发起延时30分钟的任务 /** * 取消订单的任务 * @Title: startCancelOrderTask * @Description: 取消订单的任 ...
- 处理类似于12306订单30分钟自动取消?
我们的QQ群606700249有人提到 如下问题 处理类似于12306订单30分钟自动取消? 做个redis hash结构的 ( 用户 id, 订单号id, value是个对象obj ) , ...
- 面试官问:生成订单30分钟未支付,则自动取消,该怎么实现?
欢迎关注方志朋的博客,回复"666"获面试宝典 来源 | https://blog.csdn.net/hjm4702192/article/details/80519010 在开发 ...
- 订单30分钟未支付自动取消怎么实现?
本文已经收录到Github仓库,该仓库包含计算机基础.Java核心知识点.多线程.JVM.常见框架.分布式.微服务.设计模式.架构等核心知识点,欢迎star~ 地址:https://github.co ...
- 面试官:生成订单30分钟未支付,则自动取消,该怎么实现?
Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记! 目录 了解需求 方案 1:数据库轮询 方案 2:JDK 的延迟队列 方案 3:时间轮算法 方案 4:redis 缓存 方案 5:使用 ...
- 实现生成订单30分钟未支付,则自动取消
目录 了解需求 方案 1:数据库轮询 思路 实现 优点 缺点 方案 2:JDK 的延迟队列 思路 实现 优点 缺点 方案 3:时间轮算法 思路 实现 优点 缺点 方案 4:redis 缓存 思路一 实 ...
- 生成订单30分钟未支付,则自动取消,该怎么实现?(典藏版)
目录 方案分析 (1)数据库轮询 (2)JDK的延迟队列 (3)时间轮算法 (4)redis缓存 (5)使用消息队列 在开发中,往往会遇到一些关于延时任务的需求.例如 生成订单30分钟未支付,则自动取 ...
- Redis key过期事件监听实现 - 30分钟自动取消未支付订单
目录 一.前言 二.实现方案分析 三.Redis key过期事件方案实现步骤 3.1 Redis 安装步骤详见 3.2 修改 Redis 配置 3.3 在获取支付链接视图中设置key过期事件 3.4 ...
- 如何实现生成订单30分钟内未支付则自动取消?
如何实现生成订单30分钟内未支付则自动取消? 数据库轮询 JDK的延迟队列 Quartz 时间轮算法 使用消息队列 数据库轮询 不是很推荐的一种方式,需要定时扫描数据库,借助定时任务工具,如果是多服务 ...
- 订单30分钟未支付自动取消怎么实现
了解需求 在开发中,往往会遇到一些关于延时任务的需求. 例如 生成订单 30 分钟未支付,则自动取消 生成订单 60 秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么 ...
最新文章
- max分发-(网络系统克隆)
- php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序
- 干货!全面认识Docker和基本指令
- Altium Designer实现原理图到PCB板的转换
- python动态图形_利用matplotlib实现根据实时数据动态更新图形
- Qt5.3.2(VS2010)_调试_进入Qt源码
- 局域网共享加密账号密码登录自动创建账户
- 裸辞后,随便找份工作干着还是等找到满意的为止?
- 海贼王 动漫 全集目录 分章节 精彩打斗剧集
- Codeforces - Serval and Rooted Tree
- java毕业设计房产交易系统Mybatis+系统+数据库+调试部署
- randon变换(拉东变换)
- 人脸识别、二维码电子签到,让会议会展入场更加智能!
- AM335X 内存配置
- C/C++ 程序员的职业生涯规划,你想从事哪方面呢?这里都有介绍
- 【解决】from win32com.shell import shellcon, shell ImportError: DLL load failed: 找不到指定的程序。
- 中国银纳米线行业现状调查及竞争前景分析报告2021年版
- activeperl安装失败
- jdk卸载(Jdk卸载不干净的影响)
- !终端伪装测试之fuck校园网
热门文章
- android背光,Android背光亮度调节
- 低维空间到高维空间的映射
- Java PCM音频变声
- sqli-labs注入特色分类教程1-15【手动注入与sqlmap全面双解】
- r语言是高级编程语言_什么是R编程?
- 建站教程|小鸟云服务器搭建Wordpress站点
- 单位圆的面积为π,因此可以通过求单位圆面积的近似值来求π的近似值
- 1419 最小公倍数挑战(素数性质之两两互质 与 取“3”个数的特殊性)
- 系统运维工程师30岁学python_一名Linux系统运维工程师的自述
- OpenHarmony代码操作总结