方案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分钟后取消方案分析相关推荐

  1. java实现订单未支付失效_未支付订单30分钟后,自动取消

    未支付订单30分钟后,自动取消 生成订单时发起延时30分钟的任务 /** * 取消订单的任务 * @Title: startCancelOrderTask * @Description: 取消订单的任 ...

  2. 处理类似于12306订单30分钟自动取消?

    我们的QQ群606700249有人提到 如下问题  处理类似于12306订单30分钟自动取消? 做个redis hash结构的 ( 用户 id,   订单号id, value是个对象obj  ) ,  ...

  3. 面试官问:生成订单30分钟未支付,则自动取消,该怎么实现?

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源 | https://blog.csdn.net/hjm4702192/article/details/80519010 在开发 ...

  4. 订单30分钟未支付自动取消怎么实现?

    本文已经收录到Github仓库,该仓库包含计算机基础.Java核心知识点.多线程.JVM.常见框架.分布式.微服务.设计模式.架构等核心知识点,欢迎star~ 地址:https://github.co ...

  5. 面试官:生成订单30分钟未支付,则自动取消,该怎么实现?

    Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记! 目录 了解需求 方案 1:数据库轮询 方案 2:JDK 的延迟队列 方案 3:时间轮算法 方案 4:redis 缓存 方案 5:使用 ...

  6. 实现生成订单30分钟未支付,则自动取消

    目录 了解需求 方案 1:数据库轮询 思路 实现 优点 缺点 方案 2:JDK 的延迟队列 思路 实现 优点 缺点 方案 3:时间轮算法 思路 实现 优点 缺点 方案 4:redis 缓存 思路一 实 ...

  7. 生成订单30分钟未支付,则自动取消,该怎么实现?(典藏版)

    目录 方案分析 (1)数据库轮询 (2)JDK的延迟队列 (3)时间轮算法 (4)redis缓存 (5)使用消息队列 在开发中,往往会遇到一些关于延时任务的需求.例如 生成订单30分钟未支付,则自动取 ...

  8. Redis key过期事件监听实现 - 30分钟自动取消未支付订单

    目录 一.前言 二.实现方案分析 三.Redis key过期事件方案实现步骤 3.1 Redis 安装步骤详见 3.2 修改 Redis 配置 3.3 在获取支付链接视图中设置key过期事件 3.4 ...

  9. 如何实现生成订单30分钟内未支付则自动取消?

    如何实现生成订单30分钟内未支付则自动取消? 数据库轮询 JDK的延迟队列 Quartz 时间轮算法 使用消息队列 数据库轮询 不是很推荐的一种方式,需要定时扫描数据库,借助定时任务工具,如果是多服务 ...

  10. 订单30分钟未支付自动取消怎么实现

    了解需求 在开发中,往往会遇到一些关于延时任务的需求. 例如 生成订单 30 分钟未支付,则自动取消 生成订单 60 秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么 ...

最新文章

  1. max分发-(网络系统克隆)
  2. php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序
  3. 干货!全面认识Docker和基本指令
  4. Altium Designer实现原理图到PCB板的转换
  5. python动态图形_利用matplotlib实现根据实时数据动态更新图形
  6. Qt5.3.2(VS2010)_调试_进入Qt源码
  7. 局域网共享加密账号密码登录自动创建账户
  8. 裸辞后,随便找份工作干着还是等找到满意的为止?
  9. 海贼王 动漫 全集目录 分章节 精彩打斗剧集
  10. Codeforces - Serval and Rooted Tree
  11. java毕业设计房产交易系统Mybatis+系统+数据库+调试部署
  12. randon变换(拉东变换)
  13. 人脸识别、二维码电子签到,让会议会展入场更加智能!
  14. AM335X 内存配置
  15. C/C++ 程序员的职业生涯规划,你想从事哪方面呢?这里都有介绍
  16. 【解决】from win32com.shell import shellcon, shell ImportError: DLL load failed: 找不到指定的程序。
  17. 中国银纳米线行业现状调查及竞争前景分析报告2021年版
  18. activeperl安装失败
  19. jdk卸载(Jdk卸载不干净的影响)
  20. !终端伪装测试之fuck校园网

热门文章

  1. android背光,Android背光亮度调节
  2. 低维空间到高维空间的映射
  3. Java PCM音频变声
  4. sqli-labs注入特色分类教程1-15【手动注入与sqlmap全面双解】
  5. r语言是高级编程语言_什么是R编程?
  6. 建站教程|小鸟云服务器搭建Wordpress站点
  7. 单位圆的面积为π,因此可以通过求单位圆面积的近似值来求π的近似值
  8. 1419 最小公倍数挑战(素数性质之两两互质 与 取“3”个数的特殊性)
  9. 系统运维工程师30岁学python_一名Linux系统运维工程师的自述
  10. OpenHarmony代码操作总结