当前位置:首页>活动 >

天天资讯:万字长文简单明了的介绍xxl-job以及quartz

时间:2023-02-06 19:02:26    来源:阿里开发者

简介: 本文主要介绍分布式定时任务框架xxl-job,本文首先会对xxl-job做一个基本的介绍,接着将xxl-job与quartz做一个比较,最后就是介绍xxl-job调度的详细过程。

前言

本文主要介绍分布式定时任务框架xxl-job,本文首先会对xxl-job做一个基本的介绍,接着将xxl-job与quartz做一个比较,最后就是介绍xxl-job调度的详细过程。

xxl-job的介绍

xxl-job是一个开源的分布式定时任务框架,其调度中心和执行器是相互分离,分开部署的,两者通过HTTP协议进行通信。其架构如下图所示:


(资料图片仅供参考)

调度中心:

负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;

支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover,支持创建执行器等功能。

执行模块(执行器):

负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;接收“调度中心”的执行请求、终止请求和日志请求等。

特性

xxl-job的特性有很多,官网上有详细的介绍,这里我会介绍几个重要的特性:

1.简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;

2.动态:支持动态修改任务状态、启动/停止任务,以及终止运行中的任务,都是即时生效的。

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

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

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

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

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

xxl-job相关的数据表

xxl-job将任务信息以及日志信息持久化到数据表中,这个就保证了可以动态的添加删除任务。

1.xxl_job_lock:任务调度锁表,在线程查询任务信息时会调用上锁。

2.xxl_job_group:执行器信息表,维护任务执行器信息;

3.xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;

4.xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;

5.xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;

6.xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;

7.xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;

8.xxl_job_user:系统用户表;

xxl-job与quartz的异同

这一部分主要是将quartz和xxl-job做一个比较,quartz是一款开源的使用非常广泛的定时任务框架。其可以说是定时任务的鼻祖,很多理念都与xxl-job类似。

综合比较

整体来说,xxl-job就是quartz的一个增强版,其弥补了quartz不支持并行调度,不支持失败处理策略和动态分片的策略等诸多不足,同时其有管理界面,上手比较容易,支持分布式,适用于分布式场景下的使用。两者相同的是都是通过数据库锁来控制任务不能重复执行。

核心类比较

类名

作用

QuartzSchedulerThread

负责执行向QuartzScheduler注册的触发Trigger的工作的线程

ThreadPool

Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提供运行效率

QuartzSchedulerResources

包含创建QuartzScheduler实例所需的所有资源(JobStore,ThreadPool等)

SchedulerFactory

生成Scheduler实例

JobStore

通过类实现的接口,这些类要为org.quartz.core.QuartzScheduler的使用提供一个org.quartz.Job和org.quartz.Trigger存储机制。作业和触发器的存储应该以其名称和组的组合为唯一性。

QuartzScheduler

这是Quartz的核心,它是org.quartz.Scheduler接口的间接实现,包含调度org.quartz.Jobs,注册org.quartz.JobListener实例等的方法。

Scheduler

代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。

Trigger

具有所有触发器通用属性的基本接口,描述了job执行的时间出发规则,使用TriggerBuilder实例化实际触发器,即表示什么时候去调用任务

JobDetail

表示一个具体的可执行的调度程序,Job是这个可执行的调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略

Job

表示一个工作,即要执行的具体内容

quartz中的类有很多,我们关注并掌握好Schedule(调度容器),Trigger(触发器),JobDetail&Job(定义具体的执行任务)这几个类就掌握了quartz的核心了。因为其余的类都是围绕这几个类转的,下图展示了各个核心类的调用关系:

quartz的调用示例:

public class RAMQuartz {    public static void main(String[] args) throws SchedulerException {   //1.创建Scheduler的工厂        SchedulerFactory sf = new StdSchedulerFactory();        //2.从工厂中获取调度器实例        Scheduler scheduler = sf.getScheduler();        //3.创建JobDetail        JobDetail jobDetail = JobBuilder.newJob(RAMJob.class).withDescription(\"this is a ram job\")                .withIdentity(\"ramJob\", \"ramGroup\").build();   //job的name和group        // 4.任务运行的时间,SimpleScheduler类型触发器有效,3秒后启动        long time = System.currentTimeMillis() + 3 * 1000L;        Date startTime = new Date(time);        // 5.创建Trigger        CronTrigger cronTrigger = TriggerBuilder.newTrigger().withDescription(\"\")                .withIdentity(\"ramTrigger\", \"ramTriggerGroup\")                .startAt(startTime).withSchedule(CronScheduleBuilder.cronSchedule(\"0/10 * * * * ?\")) //每10秒跑一次                .build();        // 6.注册任务和定时器        scheduler.scheduleJob(jobDetail, cronTrigger);        // 7.启动调度器        scheduler.start();        System.out.println(\"启动时间: \" + new Date()); }

点击查看原文,获取更多福利!

https://developer.aliyun.com/article/1149981?utm_content=g_1000367811

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

上一篇:

下一篇:

天天资讯:万字长文简单明了的介绍xxl-job以及quartz

简介:本文主要介绍分布式定时任务框架xxl-job,本文首先会对xxl-job做一个基本的介绍,接着将xxl-job与quartz做一个比较,最后就是介绍xxl-jo

2023-02-06

天天热头条丨02月06日18时内蒙古阿拉善昨日疫情新增0例、累计报告阳性感染者确诊177例

新型冠状病毒传播性强,不侥幸,不冒险,情谊常在,聚会不急一时。02月06日18时内蒙古阿拉善昨日疫情新增0例、累计报告阳性感染者确诊177例具

2023-02-06

世界报道:上海市普陀区启星学校

1、上海市普陀区启星学校是一所实施九年义务教育的特殊(智障)学校。2、学校招收的是智商在55以下的中重度智障儿童。3

2023-02-06

物语系列观看顺序动画_物语系列正确观看顺序

1、观看顺序即为动画的播出时间顺序:《化物语》于2009年7月3日开始播放,全15话;2、《伪物语》于2012年1月8日

2023-02-06

环球关注:上海易硕医疗科技有限公司

1、上海易硕医疗科技有限公司于2019年12月11日成立。2、法定代表人李梦生,公司经营范围包括:许可项目:第三类医

2023-02-06

视讯!焦作万方董秘回复:公司年度报告根据深圳证券交易所相关填报要求进行填报披露,不存在应披露而未披露信息

焦作万方(000612)02月06日在投资者关系平台上答复了投资者关心的问题。

2023-02-06

世界最资讯丨上海瑞行东岸置业有限公司

1、上海瑞行东岸置业有限公司于2016年07月22日成立。2、法定代表人杨俊龙,公司经营范围包括:房地产开发、经营,

2023-02-06

全球即时:潮州饶平发力“大招商” 12个大项目集中签约

南方日报讯(记者 杨可通讯员 饶宣)2月5日上午,潮州市饶平县、潮州港经济开发区举行2023年招商大会暨项目签约仪式,共有12家企业进行集中签

2023-02-06

环球看点!西南交通大学医学院研究生分数线_西南交通大学医学院

1、没有医学类专业。2、西南交通大学位于历史文化名城成都,是教育部直属,并由教育部、原铁道部、四川省和成都市共建的全国

2023-02-06

当前热文:卧室西南位放什么可聚财_卧室西南角放什么能聚财

解答:1、水晶在风水上的寓意很好。具有很强的风水能量,可以作为生财和驱除负能量的象征。所以在家里摆放水晶繁荣风水是非常好

2023-02-06

X 关闭

X 关闭