⑴XXL-JOB是一个功能强大简单专业的分布式任务调度平台搭建框架,可帮助用户快速便捷搭建专业完美的任务调度网站平台,可轻松实现专业便捷的分布式任务调度,同时该软件支持任务调度自定义以及Glue代码编辑可进入任务调度界面进行任务属性编辑,实现简单专业的分布式任务调度;XXL-JOB拥有对用户友好的操作界面,操作简单便捷,一分钟即可熟练使用,该软件支持任务自动调度和手动调度功能,可在线配置调度任务入参,实现灵活便捷的任务分配,同时该软件还内置调度日志功能,可以查看任务调度历史日志,便于系统任务管理。
⑵线程池隔离:调度线程池进行隔离拆分,慢任务自动降级进入”Slow”线程池,避免耗尽调度线程,提高系统稳定性;
⑶用户管理:支持在线管理系统用户,存在管理员普通用户两种角色;
⑷权限控制:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;
⑸数据加密:调度中心和执行器之间的通讯进行数据加密,提升调度信息安全性;
⑹邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件;
⑺推送maven中央仓库: 将会把最新稳定版推送到maven中央仓库, 方便用户接入和使用;
⑻触发策略:提供丰富的任务触发策略,包括:Cron触发固定间隔触发固定延时触发API(事件触发人工触发父子任务触发;
⑼调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略立即补偿触发一次等;
⑽阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认丢弃后续调度覆盖之前调度;
⑾任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
⑿任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;
⒀任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信钉钉等告警方式;
⒁路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个最后一个轮询随机一致性HASH最不经常使用最近最久未使用故障转移忙碌转移等;
⒂分片广播任务:执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务;
⒃动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
⒄故障转移:任务路由策略选择”故障转移”情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
⒅任务进度监控:支持实时监控任务进度;
⒆Rolling实时日志:支持在线查看调度结果,并且支持以Rolling方式实时查看执行器输出的完整的执行日志;
⒇GLUE:提供Web IDE,支持在线开发任务逻辑代码,动态发布,实时编译生效,省略部署上线的过程。支持个版本的历史版本回溯。
⒈脚本任务:支持以GLUE模式开发和运行脚本任务,包括ShellPythonNodeJSPHPPowerShell等类型脚本;
⒉命令行任务:原生提供通用命令行任务Handler(Bean任务,”mandJobHandler”;业务方只需要提供命令行即可;
⒊任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔;
⒋运行报表:支持实时查看运行数据,如任务数量调度次数执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
⒌调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞;
⒍XXL-JOB界面简洁直观操作简单便捷,一分钟上手
⒎具备开发迅速学习简单轻量级易扩展等特性
⒏支持任务参数自定义,可在线配置调度任务
⒐支持动态修改任务状态启动/停止任务
⒑支持集群部署,可保证调度中心HA
⒒支持多国语言显示设置
⒓点击进入”执行器管理”界面, 如下图:
⒔"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会以failover的模式进行回调调度中心通知执行结果,
⒕避免回调的单点风险;"执行器列表" 中显示在线的执行器列表, 可通过"OnLine 机器"查看对应执行器的集群机器。
⒖点击按钮 “+新增执行器” 弹框如下图, 可新增执行器配置:
⒗AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器,
⒘供任务调度时使用;名称: 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;排序: 执行器的排序,
⒙系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表;注册方式:调度中心获取执行器地址的方式;
⒚自动注册:执行器自动进行执行器注册,调度中心通过底层注册表可以动态发现执行器机器地址;
⒛手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;机器地址:"注册方式"为"手动录入"时有效,支持人工维护执行器的地址信息;
①进入任务管理界面,点击“新增任务”按钮,在弹出的“新增任务”界面配置任务属性后保存即可。详情页参考章节 “三任务详解”。
②进入任务管理界面,选中指定任务。点击该任务右侧“编辑”按钮,在弹出的“编辑任务”界面更新任务属性后保存即可,可以修改设置的任务属性信息:
③. 编辑GLUE代码
④该操作仅针对GLUE任务。
⑤选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发。可参考章节 “.
⑥GLUE模式(Java)”。
⑦. 启动/停止任务
⑧可对任务进行“启动”和“停止”操作。
⑨需要注意的是,此处的启动/停止仅针对任务的后续调度触发行为,不会影响到已经触发的调度任务,如需终止已经触发的调度任务,可查看“.
⑩终止运行中的任务”
Ⅰ. 手动触发一次调度
Ⅱ点击“执行”按钮,可手动触发一次任务调度,不影响原有调度规则。
Ⅲ. 查看调度日志
Ⅳ点击“日志”按钮,可以查看任务历史调度日志。在历史调入日志界面可查看每次任务调度的调度结果执行结果等,点击“执行日志”按钮可查看执行器完整日志。
Ⅴ调度时间:"调度中心"触发本次调度并向"执行器"发送任务执行信号的时间;调度结果:"调度中心"触发本次调度的结果,表示成功,或其他表示失败;调度备注:"调度中心"触发本次调度的日志信息;执行器地址:本次任务执行的机器地址运行模式:触发调度时任务的运行模式,运行模式可参考章节
Ⅵ"三任务详解";任务参数:本地任务执行的入参执行时间:"执行器"中本次任务执行结束后回调的时间;执行结果:"执行器"中本次任务执行的结果,表示成功,或其他表示失败;执行备注:"执行器"中本次任务执行的日志信息;操作:
Ⅶ"执行日志"按钮:点击可查看本地任务执行的详细日志信息;详见“. 查看执行日志”;
Ⅷ"终止任务"按钮:点击可终止本地调度对应执行器上本任务的执行线程,包括未执行的阻塞任务一并被终止;
Ⅸ. 查看执行日志
Ⅹ点击执行日志右侧的 “执行日志” 按钮,可跳转至执行日志界面,可以查看业务代码中打印的完整日志,如下图;
㈠. 终止运行中的任务
㈡仅针对执行中的任务。
㈢在任务日志界面,点击右侧的“终止任务”按钮,将会向本次任务对应的执行器发送任务终止请求,将会终止掉本次任务,同时会清空掉整个任务执行队列。
㈣任务终止时通过 “interrupt” 执行线程的方式实现, 将会触发 “InterruptedException”
㈤异常。因此如果JobHandler内部catch到了该异常并消化掉的话, 任务终止功能将不可用。
㈥因此, 如果遇到上述任务终止不可用的情况, 需要在JobHandler中应该针对 “InterruptedException” 异常进行特殊处理
㈦(向上抛出) , 正确逻辑如下:
㈧而且,在JobHandler中开启子线程时,子线程也不可catch处理”InterruptedException”,应该主动向上抛出。
㈨任务终止时会执行对应JobHandler的”destroy()”方法,可以借助该方法处理一些资源回收的逻辑。
㈩. 删除执行日志
在任务日志界面,选中执行器和任务之后,点击右侧的”删除”按钮将会出现”日志清理”弹框,弹框中支持选择不同类型的日志清理策略,选中后点击”确定”按钮即可进行日志清理操作;
点击删除按钮,可以删除对应任务。
进入 “用户管理” 界面,可查看和管理用户信息;
目前用户分为两种角色:
管理员:拥有全量权限,支持在线管理用户信息,为用户分配权限,权限分配粒度为执行器;
普通用户:仅拥有被分配权限的执行器,及相关任务的操作权限;
. 版本 V..x,新特性[--]
【于V..x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本】
简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
服务HA:任务信息持久化到mysql中,Job服务天然支持集群,保证服务HA;
任务HA:某台Job服务挂掉,任务会平滑分配给其他的某一台存活服务,即使所有服务挂掉,重启时或补偿执行丢失任务;
一个任务只会在其中一台服务器上执行;
任务串行执行;
支持自定义参数;
支持远程任务执行终止;
. 版本 V..x,新特性[--]
支持任务分组;
支持“本地任务”“远程任务”;
底层通讯支持两种方式,Servlet方式 + JETTY方式;
支持“任务日志”;
支持“串行执行”,并行执行;