【延时队列】Spring定时任务+Redis的简单实现

您所在的位置:网站首页 请问spring 【延时队列】Spring定时任务+Redis的简单实现

【延时队列】Spring定时任务+Redis的简单实现

2023-03-16 07:25| 来源: 网络整理| 查看: 265

简单描述一下需求(跳出复杂的业务,简单描述一下):

机构甲会给机构乙推送任务,然后每个不同类型的任务比如A/B…等都可以设置不同的超时时间,当这条任务(我们以taskId来看作是一条唯一的任务)到期时后台调用方法去发送微信通知。

大概的需求就是上面的了。

思路:

每条任务在分配的时候查询其机构对应该种任务的超时时间,比如taskId = 1 种类为A, 这个机构的A任务设置为20分钟。调用redis的zadd方法,zadd(Integer.parseInt(map.get("mins")) * 60 * 1000 + System.currentTimeMillis());将该任务到期的时间写入redis的sorted set中。利用springboot的定时任务,不断获得到期的元素 zrangeByScore(key, 0, currentTimeMillis);获取0到当前时间内的元素进行逻辑处理和消息推送,完毕后zrem(key, member);移除有序set中的元素

解释一下,比如你当前时间是1, 加了3就是4然后你将4插入zset中. 然后currentTime是3, 这时候就没算到期,但当currentTime等于4或者5的时候就会将该元素弹出。

这种适用于对于提醒的要求没有即时性的要求。就是说一小时到期了,我不要求精准在到期的那一刻提醒,多几秒多几分都无所谓的这种。

实际场景下 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3