XXLJOB基础介绍!

XXL-JOB是一个分布式定时任务调度平台。

分布式定时任务:

  • 指的是运行在分布式集群环境下的调度任务,同一份定时任务部署多份,则同一时刻应当只允许一个定时任务执行。

源码仓库地址:

官方文档:

Crontab在线工具:

Cron表达式

Cron表达式是一个字符串,以 5 或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义。

  • [秒] [分] [时] [日期] [月] [星期]

  • [秒] [分] [时] [日期] [月] [星期] [年]

*:表示任何时间触发任务

,:表示指定的时间触发任务

-:表示一段时间内触发任务

/:表示从哪一个时刻开始,每隔多长时间触发一次任务

?:表示用于月中的天和周中的天两个子表达式,表示不指定值

如:0 30 8 * * ?表示每天早上8点半

常见问题

并发大导致任务丢失:

当大量任务并发的时候,任务会丢失。

解决方案

可以通过动态更新线程池的方式,调大整个线程池的缓冲区数量,其次可以重写拒绝策略。

  • 当超过最大缓存数量的时候,先往数据库塞,然后当有空间的时候慢慢的读出然后删除待执行的记录。

服务宕机导致任务丢失:

当任务的那台服务器宕机之后,任务也会被中断,任务丢失会导致部分数据丢失。

解决方案

业务端去缓存这个拉取的时间,比如说上次拉取是什么时候,如果中间有段丢失了。

  • 那我们下次任务就从上次丢失的地方开始拉数据,这样就补齐了。

Kill任务导致部分数据问题:

Kill任务的时候,有些数据是无法回滚的,会给修复数据带来麻烦。

分布式定时任务调度的框架对比

功能 quartz elastic-job xxl-job
HA(高可用) 多节点部署,通过数据库锁来保证只有一个节点执行任务 通过zookeeper的注册和发现,可以动态添加服务器,支持水平扩容 集群部署
任务分片 不支持 支持 支持
文档完善 完善 完善 完善
管理界面 没有
难易程度 简单 较复杂 简单
公司 OpenSymphony 当当网 个人
缺点 没有管理界面不支持任务分片,不适用于分布式场景 需要引入zookeeper,增加系统复杂度,比较复杂 通过获取数据库锁的方式,保证集群中执行任务的唯一性,性能不好