任务调度框架 quartz 和 xxl-job - 上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任务调度框架 quartz 和 xxl-job - 上相关的知识,希望对你有一定的参考价值。

参考技术A

quartz 和 xxl-job 都是任务调度框架,任务调度相关功能都可以借助这两个框架实现。
任务调度指在将来某个特定的时间、固定的时间周期或规律变化的时间周期到达时自动调度并执行指定的任务。

这两个框架都通过自己的方式实现了这个功能,区别在于对任务的创建、修改、删除、触发以及监控的操作成本上,quartz 对于这些操作直接提供了 api,这意味着开发人员拥有最大的操作权,也带来了更高的灵活性,然而对于不需要很高灵活性的系统,或调度任务的操控由非开发人员负责的系统,需要额外对 api 调用做一层封装,隔离 api 操作;而 xxl-job 提供这些控制的方式是提供了一个单独的可视化调度中心,这意味着任务的状态控制可以和系统分离,通过更易操作的网页界面的形式,降低了对操控者的门槛。

quartz 有四个重要的组件,使用前需要先了解他们。
参考: Quartz 入门详解

1. Scheduler
代表一个 Quartz 的独立运行容器,Scheduler 将 Trigger 绑定到特定 JobDetail, 这样当 Trigger 触发时, 对应的 Job 就会被调度。

2. Trigger
描述 Job 执行的时间触发规则。主要有 SimpleTrigger 和 CronTrigger 两个子类,通过一个 TriggerKey 唯一标识。

3. Job
定义一个任务,规定了任务是执行时的行为。JobExecutionContext 提供了调度器的上下文信息,Job 的数据可从 JobDataMap 中获取。

3. JobDetail
Quartz 在每次执行 Job 时,都重新创建一个 Job 实例,所以它不直接接受一个 Job 的实例,相反它接收一个 Job 实现类。描述 Job 的实现类及其它相关的静态信息,如 Job 名字、描述等。

添加一个任务到 quartz 容器中

ScheduleJob

暂停、恢复、删除一个任务只需调用 Scheduler 的对应方法即可。

CronTrigger 相比 SimpleTrigger 提供了更灵活的调度规则,cron 表达式的知识可参考 cron 表达式详解 。
在线 cron 表达式生成器

Job 实现类

tip:Job 实现类需要用 public 修饰,即不能是内部类。

InitializingBean#afterPropertiesSet 中启动调度器

调度后的控制台日志

demo 为 spring boot 项目,已上传 GitHub ,你可以在 这里 找到。

jdk 1.8
spring boot 集成了 quartz

使用 了 lombok 框架的以下注解:

xxl-job 的分析见下篇 博文

XXL-Job分布式任务调度框架-- 介绍和服务搭建1

一 xxl-job介绍

1.1 xxl-job介绍

xxl-job是轻量级的分布式任务调度框架,目标是开发迅速、简单、清理、易扩展; 老版本是依赖quartz的定时任务触发,在v2.1.0版本开始 移除quartz依 。

分布式任务调度平台XXL-JOB/

分布式任务调度平台XXL-JOB

1.2  xxl-job的特性

1、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;

2.执行器HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行HA;

3.注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;

3.弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;

4.触发策略:提供丰富的任务触发策略,包括:Cron触发、固定间隔触发、固定延时触发、API(事件)触发、人工触发、父子任务触发;

5.调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略、立即补偿触发一次等;

6.阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;

7.任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;

8.任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;

9.任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;

10.路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;

11.分片广播任务:执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务;

12.动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。

13.故障转移:任务路由策略选择”故障转移”情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。

14.任务进度监控:支持实时监控任务进度;

 1.3  xxl-job的设计思想

调度中心:将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。

执行器: 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。

  1.4  xxl-job与Elastc-job的区别和联系

1.定时任务:通过时间表达式来进行任务调度。

2.分布式调度:把需要的任务放到统一的平台中,由集群实现分布式部署和调度的方式。

3.常见的定时任务框架:1)Timer;2)scheduleExecutorService;3)springboot自带框架 schedule(fixedRate=xxxx); 4) Quartz ; 5) TBSchedule  阿里巴巴

如何选择哪一个分布式任务调度平台

  • XXL-Job和Elastic-Job都具有广泛的用户基础和完善的技术文档,都可以满足定时任务的基本功能需求

  • xxl-job侧重在业务实现简单和管理方便,容易学习,失败与路由策略丰富, 推荐使用在用户基数相对较少,服务器的数量在一定的范围内的场景下使用

  • elastic-job关注的点在数据,添加了弹性扩容和数据分片的思路,更方便利用分布式服务器的资源, 但是学习难度较大,推荐在数据量庞大,服务器数量多的时候使

二  xxl-job的服务搭建

2.1 软件包获取

1.下载源码

GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)/

2.或者从百度网盘下载

2.2 附加数据脚本

在mysql中新建xxl_db数据库,让后复制脚本直接执行,如下图:

复制sql文件中的内容,然后执行: 

2.3  修改数据库链接

2.4 打包启动

1.在admin模块进行package打包

2.5 查看

http://localhost:8080/xxl-job-admin/

admin/123456

以上是关于任务调度框架 quartz 和 xxl-job - 上的主要内容,如果未能解决你的问题,请参考以下文章

你只会用 xxl-job?一款更强大新一代分布式任务调度框架来了,太强大了!

只会用 xxl-job?更强大的新一代分布式任务调度框架来了!

只会用 xxl-job?更强大的新一代分布式任务调度框架来了!

你只会用 xxl-job?一款更强大新一代分布式任务调度框架来了,太强大了!

只会用 xxl-job?更强大的新一代分布式任务调度框架来了!

XXL-JOB原理--任务执行时间轮