一、背景
用户预约直播成功后,会在直播开始前20分钟或30分钟收到一个直播即将开始的短信。
也就是一个可变的定时任务
二、所用技术
Redisson
2.1 Redisson 介绍:
Redisson是一个在Redis的基础上实现的框架,它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。
Redission中定义了分布式延迟队列RDelayedQueue,这是一种基于我们前面介绍过的zset结构实现的延时队列,它允许以指定的延迟时长将元素放到目标队列中。
其实就是在zset的基础上增加了一个基于内存的延迟队列。当我们要添加一个数据到延迟队列的时候,redission会把数据+超时时间放到zset中,并且起一个延时任务,当任务到期的时候,再去zset中把数据取出来,返回给客户端使用。
2.2 RDelayedQueue 源码分析
2.2.1 新建延迟队列
参考
QueueUtils#addDelayedQueueObject
方法可知,在添加数据前,先调用了 getDelayedQueue
方法获取一个延迟队列
RedissonDelayedQueue#RedissonDelayedQueue



2.2.2 添加数据

三、实际业务逻辑
3.1 在项目启动时 初始化redis订阅
SystemApplicationRunner