一、简介
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
二、源码
地址:
结构
xxl-job-admin:调度中心 xxl-job-core:公共依赖 xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器) :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式; :xxl-job-executor-sample-frameless:无框架版本;
三、Springboot如何整合xxl-job
- 初始化调度数据库
//源码地址: /xxl-job/doc/db/tables_xxl_job.sql
- Maven依赖
- 配置文件信息:端口,地址,数据库连接,线程池,国际化,token认证,报警邮件服务端等等
- 配置XxlJobConfig:注解方式或者继承类方式
- 创建Handler接口:具体任务的业务逻辑
四、xxl-job架构思想
- 将调度行为抽象为调度中心公共平台,而平台本身不承担业务逻辑,调度中心负责发送调度请求。
- 将任务抽象成分散的JobHandler,交由执行器统一管理,执行器负责接收调度请求,并且执行对应的业务逻辑,调度和任务完全解耦。
- 调度和任务完全解耦,提高了系统稳定性和扩展性。
- 其中调度中心支持可视化的动态管理调度信息,包括任务和执行器的curd,GLUC开发,报警信息配置,调度机制:轮询,第一个,最后一个,随机性,一致性Hash等算法等,所有操作实时生效,同事支持调度中心日志查看和操作,执行器的状态和日志查看。
5.架构图
五、总结
常用的定时任务以及分布式框架实现:
- while (true) + 线程休眠
通过轮询+线程休眠实现定时任务。
- java.util.Timer + java.util.TimerTask
- ScheduleExecutorService
jdk1.5作为并发工具被引入,是最理想的定时任务实现方案
- Quartz
- SpringTask
- SpringBoot注解+@EnableScheduling+@Schedule
- xxl-job分布式调度中心
以上实现方式一些区别,对比:
xxl-job官网描述quartz不足之处:
- 问题一:调用API的的方式操作任务,不人性化;
- 问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。
- 问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务;
- 问题四:quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。
XXL-JOB弥补了quartz的上述不足之处。