|
@@ -2,61 +2,67 @@ XXL-JOB 1.3 用户手册
|
|
|
|
|
|
|
|
一 简介 2
|
|
一 简介 2
|
|
|
1.1 背景 2
|
|
1.1 背景 2
|
|
|
-1.2 发展 2
|
|
|
|
|
-1.3 概述 2
|
|
|
|
|
-1.4 特点 2
|
|
|
|
|
-1.5 下载 3
|
|
|
|
|
-1.6 环境 3
|
|
|
|
|
|
|
+1.2 特点 2
|
|
|
|
|
+1.3 发展 2
|
|
|
|
|
+1.4 下载 3
|
|
|
|
|
+1.5 环境 3
|
|
|
二 快速入门 4
|
|
二 快速入门 4
|
|
|
2.1 初始化"调度数据库" 4
|
|
2.1 初始化"调度数据库" 4
|
|
|
2.2 编译源码 5
|
|
2.2 编译源码 5
|
|
|
2.3 配置部署"调度中心" 5
|
|
2.3 配置部署"调度中心" 5
|
|
|
-2.4 配置部署"执行器" 7
|
|
|
|
|
-2.5 开发第一个任务"Hello World" 8
|
|
|
|
|
-三 系统详解 12
|
|
|
|
|
-3.1 源码目录介绍 12
|
|
|
|
|
-3.1 "调度数据库"详解 12
|
|
|
|
|
-3.2 "调度中心"详解 12
|
|
|
|
|
-3.3 "执行器"详解 12
|
|
|
|
|
-四 任务详解 13
|
|
|
|
|
-4.1 BEAN模式任务 13
|
|
|
|
|
-4.2 GLUE模式任务 13
|
|
|
|
|
-五 任务管理 14
|
|
|
|
|
-5.1 编辑任务信息 14
|
|
|
|
|
-5.2 编辑GLUE代码 14
|
|
|
|
|
-5.3 恢复/暂停 14
|
|
|
|
|
-5.4 手动触发一次调度 14
|
|
|
|
|
-5.5 查看日志 14
|
|
|
|
|
-5.6 删除任务 14
|
|
|
|
|
-六 设计原理 15
|
|
|
|
|
-6.1 总体架构 15
|
|
|
|
|
-6.2 调度原理 15
|
|
|
|
|
-6.3 通讯原理 15
|
|
|
|
|
-6.4 执行器原理 15
|
|
|
|
|
-七 其他 16
|
|
|
|
|
-7.1 接入登记 16
|
|
|
|
|
-7.2 报告问题 16
|
|
|
|
|
|
|
+2.4 配置部署"执行器项目" 7
|
|
|
|
|
+2.5 开发第一个任务"Hello World" 9
|
|
|
|
|
+三 任务详解 12
|
|
|
|
|
+4.1 BEAN模式任务 12
|
|
|
|
|
+4.3 GLUE模式任务 13
|
|
|
|
|
+四 任务管理 15
|
|
|
|
|
+5.1 编辑任务信息 15
|
|
|
|
|
+5.2 编辑GLUE代码 15
|
|
|
|
|
+5.3 恢复/暂停 16
|
|
|
|
|
+5.4 手动触发一次调度 16
|
|
|
|
|
+5.5 查看日志 16
|
|
|
|
|
+5.6 删除任务 17
|
|
|
|
|
+5.7 终止运行中的任务 17
|
|
|
|
|
+五 总体设计 19
|
|
|
|
|
+5.1 源码目录介绍 19
|
|
|
|
|
+5.2 "调度数据库"配置 19
|
|
|
|
|
+5.2 架构设计 21
|
|
|
|
|
+6.3 调度模块 22
|
|
|
|
|
+6.4 任务模块 24
|
|
|
|
|
+6.5 通讯模块 24
|
|
|
|
|
+七 其他 25
|
|
|
|
|
+7.1 接入登记 25
|
|
|
|
|
+7.2 报告问题 25
|
|
|
|
|
|
|
|
|
|
|
|
|
一 简介
|
|
一 简介
|
|
|
1.1 背景
|
|
1.1 背景
|
|
|
- 作业调度系统我使用过相当一部分,比如Java Timer、linux corntab和quartz,但是都遇到一些共同的问题,开发成本高,维护复杂等等。在我进入大众点评之后,我试用过内部调度系统,功能完善,但是开发和部署流程略复杂。
|
|
|
|
|
- 我钟爱KISS原则,因此我萌发了打造XXL-JOB的想法,期望是能够创造一种全新的调度体验。
|
|
|
|
|
- 1.2 发展
|
|
|
|
|
|
|
+ Quartz作为开源作业调度中的佼佼者,是作业调度的首选。
|
|
|
|
|
+ 非集群Quartz开发需要配置Trigger,JobBean,配置Corn等等,虽然简单,但是流程较多;集群Quartz采用API的方式对任务进行管理,从而可以避免上述问题,但是同样存在以下问题:
|
|
|
|
|
+ 问题一:调用API的的方式操作任务,不人性化;
|
|
|
|
|
+ 问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。 问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况加,此时调度系统的性能将大大受限于业务;
|
|
|
|
|
+ 为了解决上述问题,期望是能够创造一种全新的调度体验。新系统目标是:更易维护、更高的可用性和更好的伸缩性。这要求"调度"和"作业"进行解耦,同时支持友好的可视化管理。由此,我萌发了打造XXL-JOB的想法,
|
|
|
|
|
+ 1.2 特点
|
|
|
|
|
+ 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
|
|
|
|
|
+ 2、动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
|
|
|
|
|
+ 3、服务HA:任务信息持久化到mysql中,Job服务天然支持集群,保证服务HA;
|
|
|
|
|
+ 4、任务HA:某台Job服务挂掉,任务会平滑分配给其他的某一台存活服务,即使所有服务挂掉,重启时或补偿执行丢失任务;
|
|
|
|
|
+ 5、一个任务只会在其中一台服务器上执行;
|
|
|
|
|
+ 6、任务串行执行;
|
|
|
|
|
+ 7、支持任务执行日志;
|
|
|
|
|
+ 8、支持自定义参数;
|
|
|
|
|
+ 9、支持任务失败次数超阈值邮件报警;
|
|
|
|
|
+ 10、支持在线查看,执行器详细日志;
|
|
|
|
|
+ 11、支持远程任务执行终止;
|
|
|
|
|
+ 12、支持登录验证;
|
|
|
|
|
+ 1.3 发展
|
|
|
我于2015-11-28在github上创建XXL-JOB项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计......
|
|
我于2015-11-28在github上创建XXL-JOB项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计......
|
|
|
- 于2016-12-05日XXL-JOB终于release了第一个大版本V1.0, 随后我将之发布到OSCHINA,XXL-JOB在OSCHINA上获得了@红薯的推荐,同期分别达到了OSCHINA的"热门动弹"排行第一和git.oschina的月热度排行第一,在此特别感谢红薯,感谢大家的关注和支持。
|
|
|
|
|
- 于2015-12月中旬我将XXL-JOB发表到我司内部知识库,得到内部同事认可。于2016-01月我司展开XXL-JOB的内部接入和定制工作。
|
|
|
|
|
|
|
+ 于2015-12-05日XXL-JOB终于release了第一个大版本V1.0, 随后我将之发布到OSCHINA,XXL-JOB在OSCHINA上获得了@红薯的推荐,同期分别达到了OSCHINA的"热门动弹"排行第一和git.oschina的月热度排行第一,在此特别感谢红薯,感谢大家的关注和支持。
|
|
|
|
|
+ 于2015-12月中旬我将XXL-JOB发表到我司内部知识库,得到内部同事认可。于2016-01月我司展开XXL-JOB的内部接入和定制工作,在此感谢袁某和尹某两位同事的贡献,同时也感谢内部其他给与关注与支持的同事。
|
|
|
我司大众点评已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本V1.3)。自2016-01-21接入至2016-05-20为止,该系统已调度40000余次,表现优异。
|
|
我司大众点评已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本V1.3)。自2016-01-21接入至2016-05-20为止,该系统已调度40000余次,表现优异。
|
|
|
至今,XXL-JOB已接入多家公司的线上产品线,场景如电商业务,O2O业务和大数据作业等等,欢迎大家使用,XXL-JOB也将拥抱变化,持续发展。
|
|
至今,XXL-JOB已接入多家公司的线上产品线,场景如电商业务,O2O业务和大数据作业等等,欢迎大家使用,XXL-JOB也将拥抱变化,持续发展。
|
|
|
- 1.3 概述
|
|
|
|
|
- XXL-JOB是一款简单高效的分布式任务调度平台,支持可视化且实时动态的管理Trigger和Job。
|
|
|
|
|
- 1.4 特点
|
|
|
|
|
- 简单:支持通过Web在线开发Job并配置,流程简洁;
|
|
|
|
|
- 高效:任务动态部署和配置,节省打包和部署消耗,提高开发效率;
|
|
|
|
|
- 分布式:得益于Quartz的集群支持,XXL-JOB调度中心天生支持HA,避免单点故障;
|
|
|
|
|
- 实时Trigger:支持可视化的管理Trigger,动态管理Triggrer;
|
|
|
|
|
- 实时Job:支持可视化的管理Job,动态管理Job,V1.3支持在线开发业务代码;
|
|
|
|
|
- 1.5 下载
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 1.4 下载
|
|
|
Github地址:https://github.com/xuxueli/xxl-job
|
|
Github地址:https://github.com/xuxueli/xxl-job
|
|
|
Git@OSC地址:http://git.oschina.net/xuxueli0323/xxl-job
|
|
Git@OSC地址:http://git.oschina.net/xuxueli0323/xxl-job
|
|
|
(我将会在两个git仓库同步发布最新代码)
|
|
(我将会在两个git仓库同步发布最新代码)
|
|
@@ -64,7 +70,7 @@ XXL-JOB 1.3 用户手册
|
|
|
|
|
|
|
|
(图1.3:github下载链接位置)
|
|
(图1.3:github下载链接位置)
|
|
|
源码下载请前往github自行下载,下载位置见上图1.3;
|
|
源码下载请前往github自行下载,下载位置见上图1.3;
|
|
|
- 1.6 环境
|
|
|
|
|
|
|
+ 1.5 环境
|
|
|
Maven3
|
|
Maven3
|
|
|
JDK1.7
|
|
JDK1.7
|
|
|
Tomcat7
|
|
Tomcat7
|
|
@@ -186,54 +192,126 @@ XXL-JOB 1.3 用户手册
|
|
|
(图2.5H:"调度中心"管理管理界面,任务日志入口)
|
|
(图2.5H:"调度中心"管理管理界面,任务日志入口)
|
|
|
|
|
|
|
|
三 任务详解
|
|
三 任务详解
|
|
|
- 4.1 任务参数介绍
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- (图4.1A:新增任务表单接口)
|
|
|
|
|
|
|
+ 4.1 BEAN模式任务
|
|
|
|
|
+ Bean模式任务:任务逻辑以JobHandler的形式存在于"执行器"所在项目中,开发流程如下:
|
|
|
|
|
+ A:开发JobHandler
|
|
|
|
|
+ 如图4.1A所示,一个Bean模式的JobHandler需要配置以下三项:
|
|
|
|
|
+ 继承IJobHandler;
|
|
|
|
|
+ 被Spring容器扫描为Bean示例;
|
|
|
|
|
+ 添加@JobHander(name="demoJobHandler")注解,并定制handler名称,该名称是新建任务是JobHandler属性的值;
|
|
|
|
|
+ (例如xxl-job-client-demo项目中的DemoJobHandler)
|
|
|
|
|
|
|
|
-参数名
|
|
|
|
|
-功能
|
|
|
|
|
|
|
+
|
|
|
|
|
+ (图4.1A:Bean模式任务的示例Handler)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ B:新建调度任务,并配置,参数如下
|
|
|
任务组
|
|
任务组
|
|
|
-用于分组管理任务
|
|
|
|
|
|
|
+任意选择
|
|
|
任务名
|
|
任务名
|
|
|
-任务组内,任务的唯一标示
|
|
|
|
|
|
|
+自定义,保证唯一即可
|
|
|
Corn
|
|
Corn
|
|
|
-触发执行执行的Corn表达式
|
|
|
|
|
|
|
+根据业务情况配置
|
|
|
描述
|
|
描述
|
|
|
-描述信息
|
|
|
|
|
|
|
+任意
|
|
|
执行器地址
|
|
执行器地址
|
|
|
-任务所在的执行器的地址,格式为"IP:Port"。其中IP为执行器机器IP,Port为"执行器Server"端口,如图2.4B所示。
|
|
|
|
|
|
|
+执行器的地址,格式"IP:Port",IP为"执行器"项目所在的机器的IP地址,因为本机部署所以为"127.0.0.1",Port为"执行器"端口,如图2.4B所示,"xxl-job-client-demo"项目里的"执行器"配置的默认端口为9999,因为执行器地址为:127.0.0.1:9999
|
|
|
|
|
+
|
|
|
JobHandler
|
|
JobHandler
|
|
|
-非GLUE模式任务是才需要配置,该模式下任务代码是一个继承IJobHandler的Java类对象,需要提供JobHandlee的名称,执行器才可以匹配任务Handler并执行。
|
|
|
|
|
|
|
+Bean模式,任务代码在以JobHandler的形式部署在"执行器"所在的项目里。
|
|
|
|
|
+此时应该填写对应任务JobHandler上注解@JobHander的name属性值,如图4.1A所示,示例任务name属性为demoJobHandler,因此此处填写demoJobHandler
|
|
|
执行参数
|
|
执行参数
|
|
|
-JOBHandler的入参
|
|
|
|
|
|
|
+任务执行的参数,多个入参都好分割,调用任务handler时会拆分成数组传入
|
|
|
负责人
|
|
负责人
|
|
|
任务负责人
|
|
任务负责人
|
|
|
报警邮件
|
|
报警邮件
|
|
|
-任务失败报警邮件发送地址
|
|
|
|
|
|
|
+任务失败时邮件通知的邮箱
|
|
|
报警阀值
|
|
报警阀值
|
|
|
-失败超过该阀值才会发送邮件
|
|
|
|
|
|
|
+任务失败次数超过该值才会发送报警邮件
|
|
|
开启GLUE模式
|
|
开启GLUE模式
|
|
|
-如开启GLUE模式,"执行器Server"会读取GLUE代码并执行,否则,"执行器Server"将会匹配项目中的JobHander并执行;
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- 4.2 BEAN模式任务
|
|
|
|
|
- Bean模式任务:任务逻辑以JobHandler的形式存在于"执行器"所在项目中,有以下特点;
|
|
|
|
|
|
|
+选择关闭状态
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
+ (图4.1B:Bean模式任务的示例配置)
|
|
|
4.3 GLUE模式任务
|
|
4.3 GLUE模式任务
|
|
|
|
|
+ A:新建调度任务,并配置,参数如下
|
|
|
|
|
+任务组
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+任务名
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+Corn
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+描述
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+执行器地址
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+
|
|
|
|
|
+JobHandler
|
|
|
|
|
+GLUE 模式,业务代码保存在数据库中,并不需要"执行器"根据JobHandler去匹配任务Handler,因此此时该属性disable;
|
|
|
|
|
+执行参数
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+负责人
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+报警邮件
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+报警阀值
|
|
|
|
|
+同Bean模式
|
|
|
|
|
+开启GLUE模式
|
|
|
|
|
+选择开启状态;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ (图4.2A:Glue模式任务的示例配置)
|
|
|
|
|
+
|
|
|
|
|
|
|
|
四 任务管理
|
|
四 任务管理
|
|
|
5.1 编辑任务信息
|
|
5.1 编辑任务信息
|
|
|
|
|
+ 在调度管理界面,如图5.1A所示,点击"编辑"按钮,弹出更新任务界面,界面如图5.1B所示。修改属性值,保存后实时生效。
|
|
|
|
|
+
|
|
|
|
|
+ (图5.1A:调度管理列表,"编辑"按钮)
|
|
|
|
|
+
|
|
|
|
|
+ (图5.1B:调度管理列表,更新任务界面)
|
|
|
|
|
+
|
|
|
5.2 编辑GLUE代码
|
|
5.2 编辑GLUE代码
|
|
|
|
|
+ 表操作仅针对GLUE任务,如图5.2A所示在调度管理界面点击"GLUE"按钮,进入GLUE开发界面,界面如图5.2B所示;在GLUE编辑器中可对GLUE代码进行开发;(当然也可以在IDE中开发完成后,复制粘贴到编辑中)
|
|
|
|
|
+ 版本回溯功能:如图5.2B,选择下拉框"版本回溯",会列出该GLUE的更新历史,选择相应版本即可显示该版本代码,保存后GLUE代码即回退到对应的历史版本;
|
|
|
|
|
+
|
|
|
|
|
+ (图5.2A:GLUE入口按钮)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ (图5.2B:GLUE开发界面)
|
|
|
5.3 恢复/暂停
|
|
5.3 恢复/暂停
|
|
|
|
|
+ 可对调度任务进行暂停和回复操作;
|
|
|
|
|
+
|
|
|
|
|
+ (图5.3:暂停/回复按钮)
|
|
|
|
|
+
|
|
|
5.4 手动触发一次调度
|
|
5.4 手动触发一次调度
|
|
|
|
|
+ 点击"执行"按钮,可手动触发一次任务调度,不影响原有调度规则。
|
|
|
|
|
+
|
|
|
|
|
+ (图5.3:执行按钮)
|
|
|
5.5 查看日志
|
|
5.5 查看日志
|
|
|
|
|
+ 如图5.5A所示,点击"日志"按钮,可以查看任务历史调度日志。在历史调入日志界面(见图5.5B)可查看每次任务调度的调度结果、执行结果等,点击执行日志按钮可查看执行器完整日志(如图5.5C);
|
|
|
|
|
+
|
|
|
|
|
+ (图5.5A:任务日志入口)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ (图5.5B:执行日志)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ (图5.5C:完整的执行日志)
|
|
|
5.6 删除任务
|
|
5.6 删除任务
|
|
|
|
|
+ 点击删除按钮,可以删除对应任务。
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ 5.7 终止运行中的任务
|
|
|
|
|
+
|
|
|
|
|
+ 进入调度日志界面,如图5.7所示可查看目前正在运行的任务,如果任务正在运行中,右侧将会显示"终止任务"按钮,点击按钮将会终止任务执行。
|
|
|
|
|
+ (图5.7:完整的执行日志)
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- 三 系统详解
|
|
|
|
|
- 3.1 源码目录介绍
|
|
|
|
|
|
|
+ 五 总体设计
|
|
|
|
|
+ 5.1 源码目录介绍
|
|
|
|
|
|
|
|
- (图3.1:源码目录截图)
|
|
|
|
|
|
|
+ (图5.1:源码目录截图)
|
|
|
|
|
|
|
|
目录
|
|
目录
|
|
|
介绍
|
|
介绍
|
|
@@ -249,16 +327,16 @@ JOBHandler的入参
|
|
|
"执行器"示例Wed项目源码。
|
|
"执行器"示例Wed项目源码。
|
|
|
|
|
|
|
|
其中,Wed项目"xxl-job-client-demo"是Demo执行器项目,大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目;
|
|
其中,Wed项目"xxl-job-client-demo"是Demo执行器项目,大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目;
|
|
|
- 3.2 "调度数据库"配置
|
|
|
|
|
|
|
+ 5.2 "调度数据库"配置
|
|
|
XXL-JOB调度模块基于Quartz集群实现,其"调度数据库"是在Quartz的11张集群mysql表基础上扩展而成。
|
|
XXL-JOB调度模块基于Quartz集群实现,其"调度数据库"是在Quartz的11张集群mysql表基础上扩展而成。
|
|
|
XXL-JOB首先定制了Quartz原生表结构前缀(XXL_JOB_QRTZ_),如图3.2A所示。
|
|
XXL-JOB首先定制了Quartz原生表结构前缀(XXL_JOB_QRTZ_),如图3.2A所示。
|
|
|
然后,在此基础上新增了三张扩展表,如下:
|
|
然后,在此基础上新增了三张扩展表,如下:
|
|
|
xxl_job_qrtz_trigger_info:
|
|
xxl_job_qrtz_trigger_info:
|
|
|
xxl_job_qrtz_trigger_log:
|
|
xxl_job_qrtz_trigger_log:
|
|
|
xxl_job_qrtz_trigger_logglue:
|
|
xxl_job_qrtz_trigger_logglue:
|
|
|
- 因此,XXL-JOB调度数据库共计用于14张数据库表,详细介绍如图3.2B所示。
|
|
|
|
|
|
|
+ 因此,XXL-JOB调度数据库共计用于14张数据库表,详细介绍如图5.2B所示。
|
|
|
|
|
|
|
|
- (图3.2A:XXL-JOB数据库,公共前缀配置,截图)
|
|
|
|
|
|
|
+ (图5.2A:XXL-JOB数据库,公共前缀配置,截图)
|
|
|
表介绍:XXL-JOB拥有14张表,
|
|
表介绍:XXL-JOB拥有14张表,
|
|
|
|
|
|
|
|
|
|
|
|
@@ -294,16 +372,63 @@ xxl_job_qrtz_trigger_logglue
|
|
|
任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
|
|
任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
|
|
|
xxl_job_qrtz_triggers
|
|
xxl_job_qrtz_triggers
|
|
|
Quartz表
|
|
Quartz表
|
|
|
-
|
|
|
|
|
- 3.2 "调度中心"详解
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 5.2 架构设计
|
|
|
|
|
+ 系统主要由以下三个基础模块组成:
|
|
|
|
|
+ 调度模块(调度中心xxl-job-admin):负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
|
|
|
|
|
+ 支持可视化、简单且动态的维管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志。
|
|
|
|
|
+ 任务模块(执行器xxl-job-client-demo):负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行,开发和维护更加简单和高效;
|
|
|
|
|
+ 负责接收"调度中心"的调度请求(运行/终止/日志)。
|
|
|
|
|
+ 通讯模块:负责调度模块和任务模块之间的信息通讯;
|
|
|
|
|
|
|
|
- 3.3 "执行器"详解
|
|
|
|
|
-
|
|
|
|
|
- 六 设计原理
|
|
|
|
|
- 6.1 总体架构
|
|
|
|
|
- 6.2 调度原理
|
|
|
|
|
- 6.3 通讯原理
|
|
|
|
|
- 6.4 执行器原理
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ 6.3 调度模块
|
|
|
|
|
+ A:RemoteHttpJobBean:常规Quartz的开发,任务逻辑一般维护在QuartzJobBean中,耦合很严重。XXL-JOB中"调度模块"和"任务模块"完全解耦,调度模块中的所有调度任务使用同一个QuartzJobBean,即RemoteHttpJobBean。不同的调度任务将各自参数维护在各自扩展表数据中,当触发RemoteHttpJobBean执行时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。
|
|
|
|
|
+ 这种调用模型类似RPC调用,RemoteHttpJobBean提供调用代理的功能,而执行器提供远程服务的功能。
|
|
|
|
|
+
|
|
|
|
|
+ B:集群分布式:基于Quartz的集群方案,数据库选用Mysql;集群分布式并发环境中使用QUARTZ定时任务调度,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ C:调度线程池:默认线程池中线程的数量为10个,避免单线程因阻塞而引起任务调度延迟。
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ D:@DisallowConcurrentExecution:XXL-JOB调度模块的"调度中心"默认不使用该注解,即默认开启并行机制,因为RemoteHttpJobBean为公共QuartzJobBean,这样在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。
|
|
|
|
|
+ XXL-JOB的每个调度任务虽然在调度模块是并行调度执行的,但是任务调度传递到任务模块的"执行器"确实串行执行的,同时支持任务终止。
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ E:misfire:错过了触发时间,处理规则
|
|
|
|
|
+ 可能原因:服务重启;调度线程被QuartzJobBean阻塞,线程被耗尽;某个任务启用了@DisallowConcurrentExecution,上次调度持续阻塞,下次调度被错过;
|
|
|
|
|
+
|
|
|
|
|
+ Quartz.properties中关于misfire的阀值配置,单位毫秒:
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ Misfire规则:
|
|
|
|
|
+ withMisfireHandlingInstructionDoNothing:不触发立即执行,等待下次调度;
|
|
|
|
|
+ withMisfireHandlingInstructionIgnoreMisfires:以错过的第一个频率时间立刻开始执行;
|
|
|
|
|
+ withMisfireHandlingInstructionFireAndProceed:以当前时间为触发频率立刻触发一次执行;
|
|
|
|
|
+
|
|
|
|
|
+ XXL-JOB默认misfire规则为:withMisfireHandlingInstructionDoNothing
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ F:日志回调服务:
|
|
|
|
|
+ 调度模块的"调度中心"作为Web服务单独部署,除此之外,内部嵌入jetty服务器提供日志回调服务。
|
|
|
|
|
+ "执行器"在接收到任务执行请求后,执行任务,在执行结束之后会将执行结果回调通知"调度中心",如下图所示。
|
|
|
|
|
+
|
|
|
|
|
+ 6.4 任务模块
|
|
|
|
|
+ 任务开发:请参考章节三;
|
|
|
|
|
+ 执行器详解:
|
|
|
|
|
+ 任务日志:
|
|
|
|
|
+ 6.5 通讯模块
|
|
|
|
|
|
|
|
七 其他
|
|
七 其他
|
|
|
7.1 接入登记
|
|
7.1 接入登记
|