任务调度平台只会Quartz?让本小妹来带你飞~

2022-12-06 15:34:48 浏览数 (2)

大家好,我是人见人爱,花见花开的开源小妹。今天我来给大家分享一个超好用的分布式任务调度平台:XXL-JOB。

一、背景

事情的起因是这样滴:最近公司项目需要改革,找出之前项目的痛点,然后对症下药。本来我以为没有本小妹什么事呢,结果。。。不说了,直接上图。

你们也看到了,这篇文章是怎么来的啦,哈哈。

二、和Quartz的对比

既然我们公司之前用的是Quartz,但是现在要换了它,那么我们就来看看Quartz哪里不好,同时也看看XXL-JOB好在哪里。

Quartz的不足

  • 问题一:调用API的方式操作任务,不人性化;
  • 问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重;
  • 问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务;
  • 问题四:quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。

XXL-JOB的特性

  • 简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手
  • 动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效
  • 调度中心HA(中心式):调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群部署,可保证调度中心HA 执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA
  • 注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址
  • 弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务
  • 路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等
  • 故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求
  • 阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度
  • 任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务
  • 任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试
  • 任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式
  • 分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务 ... XXL-JOB的优点有点太多了呢,哈哈,我是不是有点喜新厌旧了呢。

三、快速入门

看到这么多优点,你们是不是也有点迫不及待了呢?不要急,不要慌,待本小妹慢慢带你们入门。

下载项目,源代码地址为:略略略,容本小妹卖个关子,一会告诉你们源码地址,下载完成之后直接使用maven进行编译即可;

源代码结构如下:

快夸我贴心,源码的用处我都给标出来啦。

初始化数据库,直接执行自带的数据库脚本即可,就不用本小妹多说啦

部署任务调度中心项目xxl-job-admin

该项目的作用是:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

修改配置文件: xxl-job-admin/src/main/resources/application.properties,一般修改下数据库连接地址即可

部署启动项目:以上配置正确,直接编译启动项目即可

项目访问地址为:http://localhost:9080/xxl-job-admin (由于我这里8080端口被占用了,因此我换成了8090端口,嘻嘻)

登录系统: 用户名密码为:admin/123456

首页图如下

至此,“任务调度中心管理系统”已部署成功。还不要高兴的太早哦,这刚刚完成了一半。

部署执行器项目

可以使用作者提供的实例项目:

也可以集成到现有的项目中。这里我要集成到自己已有的服务中。(又得夸我一波了)

步骤一:引入依赖

代码语言:javascript复制
<dependency>
  <groupId>com.xuxueli</groupId>
  <artifactId>xxl-job-core</artifactId>
  <version>2.3.0</version>
</dependency>

步骤二:添加执行器的配置信息

可以copy【xxl-job-executor-sample-springboot】项目中的配置文件,放到自己项目下,做一些相应的修改

步骤三:执行器组件配置

可以copy示例代码中的配置文件到自己项目中,配置位置为:

步骤四:执行执行器项目

上述配置完成之后,可以直接执行项目的主启动类,以启动执行器。

开发定时任务

步骤一:代码的编写

步骤二:在任务调度中心添加任务

保存后效果如下:

启动“调度中心”和“定时器”执行任务

至此,XXL-JOB的快速入门已经完成。

四、效果图展示

我还贴心的为大家准备了系统的截图哦~~

1.运行报表(首页)

在首页可以查看任务的总体情况,包括任务个数,总调度次数等等

2.任务管理

对所有定时任务进行一个统一管理,定时任务是依赖于执行器的,一个执行器包含多个定时任务

3.调度日志

查看定时任务的执行情况,包含成功失败等情况,失败的可以查看失败原因

4.执行器管理

管理执行器,可以类比微服务中,服务注册中心对于注册到该中心的微服务的管理

5.用户管理

五、系统架构

  • 该系统主要分为调度中心和执行器两部分,主要采用了微服务中的服务注册管理的思想
  • 执行器包含了任务线程,任务信息等
  • 调度中心则主要是对所有任务的统一调度管理,类似服务注册中心对于微服务的管理

该系统和微服务中的服务注册中心的思想非常类似,几个关键组件的关系如下图所示:

六、总结

目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等....

而我们公司在最近也接入了该项目,确实解决了之前定时任务使用的一些痛点,而且效果也很乐观,所以如果你也在寻找分布式任务调度系统的话,这个框架可以是一个不错的选择,感兴趣的同学可以去了解下。

0 人点赞