+
 新版

java如何实现一个尽可能没有延迟的定时提醒服务

微笑兔 发布于 2020/08/24 09:34
阅读 2K+
收藏 0

场景:

   需要实现一个定时提醒任务,用户设置时间,后端到时间后提醒。有点类似闹钟的功能,因此要尽可能没有延迟。目前使用量不是很大。现阶段是使用xxl-job做的定时任务,每5分钟执行一次。但是这样可能会延迟1-5分钟,如果用户量大了处理时间可能更长。(我们没有app端,只有公众号和小程序,因此无法依赖用户端)

 

考虑方案:

    每天定时任务将当天的要执行的任务塞到mq的延迟队列中,对于修改和新设置的单独处理,修改时,修改消息的id,不撤回消息,在处理时校验消息id,没有则不投递,新增的当天的任务,单独添加。

但这样需要跟运维确认rocketmq的延迟等级设置。感觉也并不是很好。

 

不知各位大佬有什么比较好的方案,能降低延迟投递。

加载中
0
FortgetMeNot
FortgetMeNot

你可以使用xxl-job生成一次性任务,一个提醒一个任务,到期后这个任务就结束了。

0
kakai
kakai

用户设定时间即可后端开启一个定时任务,并不需要把用户设定的时间放队列里,后端开启定时任务定期扫描执行。

0
浮云翌日
浮云翌日

把定时任务转换成延时任务,然后使用redisson的延时队列去处理。其实xxl-job也是基于延时任务处理的,只是它的下一处理时间存的是数据库。redisson的话存redis上。

0
沉
沉默中主宰

使用redis的订阅功能,订阅key过期事件,每5分钟查询一次,把5分钟内需要提醒的任务id作为key放到redis中,计算好过期时间

0
J
JYYH
使用quartz 框架,在用户设置时,等于设置了定时任务的启动时间。也不需要定时的轮询任务
0
成功大侠
成功大侠
直接用操作系统的crontab功能设置,这样最准确
0
皖渝-驻OSC大使
皖渝-驻OSC大使

这不适合做Runnable或者Thread,完全就是一个Timer,用户设置时间的时候,生成Timer,到期自动提醒,提醒结束自动关闭。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部