场景
延时任务的需求是非常常见的,在我们的开发生涯中,我相信大部分研发人员是会有接触到这一块的。其中,我们在现实生活中比较常接触到的场景有
- 下单后未付款通知
- 订单延迟生成短信通知
- 红包未领取退款通知
- 用户行程将近通知
- 微信公众号的文章延时发布推送等
常规模块
存储
主要负责存储任务的相关信息,比如任务执行所需要的相关信息,执行时间,重试次数等调度
负责时间的调度,判断任务是否到达可执行执行
负责任务的实际执行
在非分布式的情况下,通常这三者是出现在同一个应用内部的;但如果是在分布式系统架构中,那么存储、执行和调度通常是分开的,并且一个任务还可能分割成多个 子任务分别在不同的服务上运行。分布式情况下,每一个模块可选的方案都不少,多样且复杂;但是最终都需要单体内实现的支持,我们这里就只讨论单体模式下的延 时任务方案。