茅断卉 发表于 2025-6-1 20:32:37

虚拟电商-延迟任务系统的设计实现

一、什么是延迟任务


什么是延迟任务?
12306下单等待支付业务:
 

 

 定时任务与延迟任务的区别:
  定时任务往往是固定周期的,有明确的触发时间。而延迟任务一般没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟,任务之间也可以建立一定联系;
  场景一: 订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单;如果期间下单成功,任务取消
  场景二:接口对接出现网络问题,1分钟后重试,如果失败,2分钟重试,直到出现阈值终止

 

延迟任务的实现方案:
  1:单机版方案:基于jdk中的定时器
  2:消息中间件方案
  3:自定义分布式延迟任务方案
  方案没有好坏之分,和系统架构一样,关键是适合自身业务系统,不过目前IT行业发展阶段,有些市面上开源中间件已经不能满足大厂自身业务,大厂基本都是从新定制开发。
二、延迟任务系统设计


  2.1.延迟任务需求分析


  延迟任务的概念我们已经阐述,在充吧项目中延迟任务的业务场景有:
  场景一: 订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单;如果期间下单成功,任务取消
  场景二:接口对接出现网络问题,1分钟后重试,如果失败,2分钟重试,直到出现阈值终止
  总结下来:简单的理解延迟任务可以认为是在某个设定的时间之后做某一件事情。
  2.2.延迟任务单机版实现方案-Timer定时器


  jdk中提供了一个定时器类Timer,它能做到在指定的时间点去执行某一个任务,也能做到定时的周期性的执行某一个任务
  1:在src/test/java下创建测试包:com.chongba.schedule.jdk,在测试包下创建测试类TimerTaskTest
public class TimerTaskTest {​    public static void main(String[] args) {      Timer timer = new Timer();      // 1秒之后 执行任务      timer.schedule(new TimerTask() {            @Override            public void run() {                System.out.println(System.currentTimeMillis()/1000+"执行了任务");            }      },1000L);      System.out.println(System.currentTimeMillis()/1000);                //执行时间

户烫擞 发表于 2025-11-2 09:50:25

谢谢分享,试用一下

戟铵腴 发表于 2025-11-20 00:33:02

用心讨论,共获提升!

缑娅瑛 发表于 2025-12-1 04:56:58

不错,里面软件多更新就更好了

茅香馨 发表于 2025-12-22 23:53:50

这个有用。

辅箱肇 发表于 2025-12-26 01:09:25

感谢发布原创作品,程序园因你更精彩

澹台吉星 发表于 2025-12-27 19:10:20

分享、互助 让互联网精神温暖你我

殳世英 发表于 2025-12-31 01:51:38

新版吗?好像是停更了吧。

何玲 发表于 2026-1-3 10:31:15

分享、互助 让互联网精神温暖你我

但婆 发表于 2026-1-13 03:29:35

这个好,看起来很实用

飧沾 发表于 2026-1-20 14:09:49

热心回复!

殷罗绮 发表于 2026-1-21 01:49:17

热心回复!

谅潭好 发表于 2026-1-21 23:21:33

感谢分享

沃盼盼 发表于 2026-1-23 01:31:16

谢谢分享,试用一下

左丘纨 发表于 2026-1-23 03:52:52

不错,里面软件多更新就更好了

寂傧 发表于 2026-1-23 13:03:33

yyds。多谢分享

芮梦月 发表于 2026-1-23 16:31:43

分享、互助 让互联网精神温暖你我

系味 发表于 2026-1-27 16:05:52

用心讨论,共获提升!

贺蛟亡 发表于 2026-1-29 02:49:47

东西不错很实用谢谢分享

岳娅纯 发表于 2026-1-30 04:10:08

yyds。多谢分享
页: [1] 2
查看完整版本: 虚拟电商-延迟任务系统的设计实现