基于ThreadPoolTaskScheduler 的轻量级任务

作者: 桌面小鱼 | 来源:发表于2020-03-27 17:05 被阅读0次

    一、传统任务调度

    基于Scheduled注解的任务调度 将cron表达式写在任务执行的方法上,具体如下:
    @Scheduled(cron = "30 59 * * * ?") 定义一个按时间执行的定时任务,在每小时59:30执行一次。
    @Scheduled(fixedRate = 1000 * 60) 定义一个按一定频率执行的定时任务,每隔1分钟执行一次
    @Scheduled(fixedRate = 1000 * 60,initialDelay = 1000) 定义一个按一定频率执行的定时任务,每隔1分钟执行一次,延迟1秒执行

    执行原理:
    https://blog.csdn.net/lwjdear/article/details/77991229

    二、需求: 需要动态维护任务(维护页面)

    架构思路

    执行页面


    操作页面

    实现思路:

    1、初始化任务:数据库维护一份任务列表,维护内容包括:任务bean、 任务methed、任务cron、任务模块类型。每种服务器初始化时,只需将自己模块的任务加入到任务队列中即可,按计划执行。
    2、前后端交互: 用户在页面CRUD、开关任务等操作,在修改数据库相关内容后,将操作内容发送到MQ中,各服务器订阅自己服务模块类型相关的MQ消息即可,这里的MQ分发消息的方式是广播(即 所有服务器都可拿到任务修改的消息,并针对消息内容对任务队列做出对应CRUD)。
    3、任务开始执行:由于是在分布式环境下执行,而且需要保证一个任务只执行一次,为避免重复执行,这里加了zk竞锁的操作,并且不释放(意味着只要在一台服务器上执行了以后,那么后面的任务执行全部都在同一台机器上,其他机器只能等待竞锁,可以保证在某执行任务的服务器挂掉以后,其他同模块下的服务器可以立即顶上,继续执行任务)

    相关文章

      网友评论

        本文标题:基于ThreadPoolTaskScheduler 的轻量级任务

        本文链接:https://www.haomeiwen.com/subject/mftruhtx.html