xxl-job


一、时间轮

二、定时任务方案

1、while(true) + Thread.sleep

轮询 + 线程休眠的方式实现定时任务

2、java.util.Timer + java.util.TimerTask

Timer 是一种定时任务工具,用来在一个后台线程计划执行指定任务,他可以计划执行一个任务一次或反复多次。

TimeTask 是一个抽象类,它的子类代表一个可以被 Timer 计划的任务。

3、ScheduledExecutorService

是从 jdk1.5 开始作为开发工具类被引入。

4、Quartz

开源的定时任务调度框架

5、@EnableScheduling + @Scheduled

Springboot 注解实现的,底层采用 Spring Task

三、分布式任务调度

分布式集群的模式下,如果采用集中式(单机)的任务调度方式,会带来一些问题:

1、集群部署的定时任务如何保证不被重复执行

2、如何动态调整定时任务的执行时间(不重启服务的情况)

3、部署定时任务的及其故障如何实现故障转移?

4、如何对定时任务进行监控

5、业务量较大,单机性能瓶颈问题,如何扩展?

集中式的定时任务对于上述的问题有一些解决方式

1、数据库唯一约束,保证任务不重复执行(多服务同时执行同一定时任务时,去数据库存储一个存在唯一约束的字段的相同值,插入成功则执行定时任务,插入失败则不执行)

2、使用配置文件、redis、mysql 作为调度的开关

3、使用分布式锁实现调度的控制(拿到锁能调度)

4、使用分布式任务调度平台 TBSchedule、Elastric-job、Saturn、xxl-job 等

xxl-job

美团-许雪里开发

https://www.xuxueli.com/xxl-job/

image-20220122161610920


  目录