|
|
|
|
@ -839,12 +839,11 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅
|
|
|
|
|
|
|
|
|
|
#### 源码仓库地址
|
|
|
|
|
|
|
|
|
|
源码仓库地址 | Release Download
|
|
|
|
|
--- | ---
|
|
|
|
|
[https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job) | [Download](https://github.com/xuxueli/xxl-job/releases)
|
|
|
|
|
[http://gitee.com/xuxueli0323/xxl-job](http://gitee.com/xuxueli0323/xxl-job) | [Download](http://gitee.com/xuxueli0323/xxl-job/releases)
|
|
|
|
|
[https://gitcode.com/xuxueli/xxl-job](https://gitcode.com/xuxueli/xxl-job) | [Download](https://gitcode.com/xuxueli/xxl-job/tags)
|
|
|
|
|
|
|
|
|
|
| 源码仓库地址 | Release Download |
|
|
|
|
|
|------------------------------------------------------------------------------|-----------------------------------------------------------|
|
|
|
|
|
| [https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job) | [Download](https://github.com/xuxueli/xxl-job/releases) |
|
|
|
|
|
| [http://gitee.com/xuxueli0323/xxl-job](http://gitee.com/xuxueli0323/xxl-job) | [Download](http://gitee.com/xuxueli0323/xxl-job/releases) |
|
|
|
|
|
| [https://gitcode.com/xuxueli/xxl-job](https://gitcode.com/xuxueli/xxl-job) | [Download](https://gitcode.com/xuxueli/xxl-job/tags) |
|
|
|
|
|
|
|
|
|
|
#### 中央仓库地址
|
|
|
|
|
|
|
|
|
|
@ -871,7 +870,9 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅
|
|
|
|
|
|
|
|
|
|
"调度数据库初始化SQL脚本" 位置为:
|
|
|
|
|
|
|
|
|
|
/xxl-job/doc/db/tables_xxl_job.sql
|
|
|
|
|
```
|
|
|
|
|
/xxl-job/doc/db/tables_xxl_job.sql
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例;
|
|
|
|
|
|
|
|
|
|
@ -880,17 +881,20 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅
|
|
|
|
|
### 2.2 编译源码
|
|
|
|
|
解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可,源码结构如下:
|
|
|
|
|
|
|
|
|
|
xxl-job-admin:调度中心
|
|
|
|
|
xxl-job-core:公共依赖
|
|
|
|
|
xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
|
|
|
|
|
:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
|
|
|
|
|
:xxl-job-executor-sample-frameless:无框架版本;
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
xxl-job-admin:调度中心
|
|
|
|
|
xxl-job-core:公共依赖
|
|
|
|
|
xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
|
|
|
|
|
:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
|
|
|
|
|
:xxl-job-executor-sample-frameless:无框架版本;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.3 配置部署“调度中心”
|
|
|
|
|
|
|
|
|
|
调度中心项目:xxl-job-admin
|
|
|
|
|
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
|
|
|
|
|
```
|
|
|
|
|
调度中心项目:xxl-job-admin
|
|
|
|
|
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 步骤一:调度中心配置:
|
|
|
|
|
调度中心配置文件地址:
|
|
|
|
|
@ -992,8 +996,10 @@ xuxueli/xxl-job-admin:{指定版本}
|
|
|
|
|
|
|
|
|
|
### 2.4 配置部署“执行器项目”
|
|
|
|
|
|
|
|
|
|
“执行器”项目:xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)
|
|
|
|
|
作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
|
|
|
|
|
```
|
|
|
|
|
“执行器”项目:xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)
|
|
|
|
|
作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 步骤一:maven依赖
|
|
|
|
|
确认pom文件中引入了 "xxl-job-core" 的maven依赖;
|
|
|
|
|
@ -1037,7 +1043,9 @@ xxl.job.executor.excludedpackage=org.springframework,spring
|
|
|
|
|
|
|
|
|
|
执行器组件,配置文件地址:
|
|
|
|
|
|
|
|
|
|
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
|
|
|
|
|
```
|
|
|
|
|
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
执行器组件,配置内容说明:
|
|
|
|
|
|
|
|
|
|
@ -1061,9 +1069,10 @@ public XxlJobSpringExecutor xxlJobExecutor() {
|
|
|
|
|
#### 步骤四:部署执行器项目:
|
|
|
|
|
如果已经正确进行上述配置,可将执行器项目编译打包部署,系统提供多种执行器Sample示例项目,选择其中一个即可,各自的部署方式如下。
|
|
|
|
|
|
|
|
|
|
xxl-job-executor-sample-springboot:项目编译打包成springboot类型的可执行JAR包,命令启动即可;
|
|
|
|
|
xxl-job-executor-sample-frameless:项目编译打包成JAR包,命令启动即可;
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
xxl-job-executor-sample-springboot:项目编译打包成springboot类型的可执行JAR包,命令启动即可;
|
|
|
|
|
xxl-job-executor-sample-frameless:项目编译打包成JAR包,命令启动即可;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
至此“执行器”项目已经部署结束。
|
|
|
|
|
|
|
|
|
|
@ -1115,6 +1124,7 @@ public XxlJobSpringExecutor xxlJobExecutor() {
|
|
|
|
|
|
|
|
|
|
### 配置属性详细说明:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
基础配置:
|
|
|
|
|
- 执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 "执行器管理" 进行设置;
|
|
|
|
|
- 任务描述:任务的描述信息,便于任务管理;
|
|
|
|
|
@ -1139,7 +1149,7 @@ public XxlJobSpringExecutor xxlJobExecutor() {
|
|
|
|
|
GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "python" 脚本;
|
|
|
|
|
GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "php" 脚本;
|
|
|
|
|
GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "nodejs" 脚本;
|
|
|
|
|
GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "PowerShell" 脚本;
|
|
|
|
|
GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "powershell" 脚本;
|
|
|
|
|
- JobHandler:运行模式为 "BEAN模式" 时生效,对应执行器中新开发的JobHandler类“@XxlJob”注解自定义的value值;
|
|
|
|
|
- 执行参数:任务执行所需的参数;
|
|
|
|
|
|
|
|
|
|
@ -1165,10 +1175,7 @@ public XxlJobSpringExecutor xxlJobExecutor() {
|
|
|
|
|
覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
|
|
|
|
|
- 任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务;
|
|
|
|
|
- 失败重试次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3.1 BEAN模式(类形式)
|
|
|
|
|
|
|
|
|
|
@ -1181,11 +1188,12 @@ Bean模式任务,支持基于类的开发方式,每个任务对应一个Java
|
|
|
|
|
|
|
|
|
|
#### 步骤一:执行器项目中,开发Job类:
|
|
|
|
|
|
|
|
|
|
1、开发一个继承自"com.xxl.job.core.handler.IJobHandler"的JobHandler类,实现其中任务方法。
|
|
|
|
|
2、手动通过如下方式注入到执行器容器。
|
|
|
|
|
```
|
|
|
|
|
XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
|
|
|
|
|
```
|
|
|
|
|
```
|
|
|
|
|
1、开发一个继承自"com.xxl.job.core.handler.IJobHandler"的JobHandler类,实现其中任务方法。
|
|
|
|
|
2、手动通过如下方式注入到执行器容器。
|
|
|
|
|
|
|
|
|
|
XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 步骤二:调度中心,新建调度任务
|
|
|
|
|
后续步骤和 "3.2 BEAN模式(方法形式)"一致,可以前往参考。
|
|
|
|
|
@ -1204,10 +1212,13 @@ Bean模式任务,支持基于方法的开发方式,每个任务对应一个
|
|
|
|
|
|
|
|
|
|
#### 步骤一:执行器项目中,开发Job方法:
|
|
|
|
|
|
|
|
|
|
1、任务开发:在Spring Bean实例中,开发Job方法;
|
|
|
|
|
2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
|
|
|
|
|
3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
|
|
|
|
|
4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;
|
|
|
|
|
```
|
|
|
|
|
步骤:
|
|
|
|
|
1、任务开发:在Spring Bean实例中,开发Job方法;
|
|
|
|
|
2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
|
|
|
|
|
3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
|
|
|
|
|
4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
// 可参考Sample示例执行器中的 "com.xxl.job.executor.jobhandler.SampleXxlJob" ,如下:
|
|
|
|
|
@ -1320,10 +1331,8 @@ spring.ai.ollama.chat.options.temperature=0.8
|
|
|
|
|
dify.base-url=http://localhost/v1
|
|
|
|
|
// dify api-key;选择相关 workflow 应用并进入 “访问API” 页面,右上角 “API 密钥” 入口获取 api-key。
|
|
|
|
|
dify.api-key={自行获取并修改}
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 3.3 GLUE模式(Java)
|
|
|
|
|
任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。开发流程如下:
|
|
|
|
|
|
|
|
|
|
@ -1387,8 +1396,10 @@ dify.api-key={自行获取并修改}
|
|
|
|
|
点击进入"执行器管理"界面, 如下图:
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会以failover的模式进行回调调度中心通知执行结果, 避免回调的单点风险;
|
|
|
|
|
2、"执行器列表" 中显示在线的执行器列表, 可通过"OnLine 机器"查看对应执行器的集群机器。
|
|
|
|
|
```
|
|
|
|
|
1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会以failover的模式进行回调调度中心通知执行结果, 避免回调的单点风险;
|
|
|
|
|
2、"执行器列表" 中显示在线的执行器列表, 可通过"OnLine 机器"查看对应执行器的集群机器。
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
点击按钮 "+新增执行器" 弹框如下图, 可新增执行器配置:
|
|
|
|
|
|
|
|
|
|
@ -1396,6 +1407,7 @@ dify.api-key={自行获取并修改}
|
|
|
|
|
|
|
|
|
|
执行器属性说明
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;
|
|
|
|
|
名称: 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;
|
|
|
|
|
排序: 执行器的排序, 系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表;
|
|
|
|
|
@ -1403,6 +1415,7 @@ dify.api-key={自行获取并修改}
|
|
|
|
|
自动注册:执行器自动进行执行器注册,调度中心通过底层注册表可以动态发现执行器机器地址;
|
|
|
|
|
手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;
|
|
|
|
|
机器地址:"注册方式"为"手动录入"时有效,支持人工维护执行器的地址信息;注册地址格式可参考“http://127.0.0.1:9999/”,为执行器内嵌服务地址;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 4.2 新建任务
|
|
|
|
|
进入任务管理界面,点击“新增任务”按钮,在弹出的“新增任务”界面配置任务属性后保存即可。详情页参考章节 "三、任务详解"。
|
|
|
|
|
@ -1434,6 +1447,7 @@ dify.api-key={自行获取并修改}
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
调度时间:"调度中心"触发本次调度并向"执行器"发送任务执行信号的时间;
|
|
|
|
|
调度结果:"调度中心"触发本次调度的结果,200表示成功,500或其他表示失败;
|
|
|
|
|
调度备注:"调度中心"触发本次调度的日志信息;
|
|
|
|
|
@ -1446,6 +1460,7 @@ dify.api-key={自行获取并修改}
|
|
|
|
|
操作:
|
|
|
|
|
"执行日志"按钮:点击可查看本地任务执行的详细日志信息;详见“4.8 查看执行日志”;
|
|
|
|
|
"终止任务"按钮:点击可终止本地调度对应执行器上本任务的执行线程,包括未执行的阻塞任务一并被终止;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 4.8 查看执行日志
|
|
|
|
|
点击执行日志右侧的 “执行日志” 按钮,可跳转至执行日志界面,可以查看业务代码中打印的完整日志,如下图;
|
|
|
|
|
@ -1503,24 +1518,28 @@ try{
|
|
|
|
|
|
|
|
|
|
## 五、总体设计
|
|
|
|
|
### 5.1 源码目录介绍
|
|
|
|
|
- /doc :文档资料
|
|
|
|
|
- /db :“调度数据库”建表脚本
|
|
|
|
|
- /xxl-job-admin :调度中心,项目源码
|
|
|
|
|
- /xxl-job-core :公共Jar依赖
|
|
|
|
|
- /xxl-job-executor-samples :执行器,Sample示例项目(大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
- /doc :文档资料
|
|
|
|
|
- /db :“调度数据库”建表脚本
|
|
|
|
|
- /xxl-job-admin :调度中心,项目源码
|
|
|
|
|
- /xxl-job-core :公共Jar依赖
|
|
|
|
|
- /xxl-job-executor-samples :执行器,Sample示例项目(大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 5.2 “调度数据库”配置
|
|
|
|
|
XXL-JOB调度模块基于自研调度组件并支持集群部署,调度数据库表说明如下:
|
|
|
|
|
|
|
|
|
|
- xxl_job_lock:任务调度锁表;
|
|
|
|
|
- xxl_job_group:执行器信息表,维护任务执行器信息;
|
|
|
|
|
- xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
|
|
|
|
|
- xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
|
|
|
|
|
- xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
|
|
|
|
|
- xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
|
|
|
|
|
- xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
|
|
|
|
|
- xxl_job_user:系统用户表;
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
- xxl_job_lock:任务调度锁表;
|
|
|
|
|
- xxl_job_group:执行器信息表,维护任务执行器信息;
|
|
|
|
|
- xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
|
|
|
|
|
- xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
|
|
|
|
|
- xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
|
|
|
|
|
- xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
|
|
|
|
|
- xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
|
|
|
|
|
- xxl_job_user:系统用户表;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 5.3 架构设计
|
|
|
|
|
#### 5.3.1 设计思想
|
|
|
|
|
@ -1582,6 +1601,7 @@ XXL-JOB的单个任务,针对多个执行器是并行运行的,针对单个
|
|
|
|
|
调度模块的“调度中心”作为Web服务部署时,一方面承担调度中心功能,另一方面也为执行器提供API服务。
|
|
|
|
|
|
|
|
|
|
调度中心提供的"日志回调服务API服务"代码位置如下:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
|
|
|
|
|
```
|
|
|
|
|
@ -1660,11 +1680,13 @@ xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
|
|
|
|
|
|
|
|
|
|
目前支持的脚本类型如下:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
- shell脚本:任务运行模式选择为 "GLUE模式(Shell)"时支持 "Shell" 脚本任务;
|
|
|
|
|
- python脚本:任务运行模式选择为 "GLUE模式(Python)"时支持 "Python" 脚本任务;
|
|
|
|
|
- php脚本:任务运行模式选择为 "GLUE模式(PHP)"时支持 "PHP" 脚本任务;
|
|
|
|
|
- nodejs脚本:任务运行模式选择为 "GLUE模式(NodeJS)"时支持 "NodeJS" 脚本任务;
|
|
|
|
|
- powershell:任务运行模式选择为 "GLUE模式(PowerShell)"时支持 "PowerShell" 脚本任务;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
脚本任务通过 Exit Code 判断任务执行结果,状态码可参考章节 "5.15 任务执行结果说明";
|
|
|
|
|
|
|
|
|
|
@ -1687,9 +1709,13 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
|
|
|
|
|
### 5.6 通讯模块剖析
|
|
|
|
|
|
|
|
|
|
#### 5.6.1 一次完整的任务调度通讯流程
|
|
|
|
|
- 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌Server,默认端口9999;
|
|
|
|
|
- 2、“执行器”执行任务逻辑;
|
|
|
|
|
- 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
流程:
|
|
|
|
|
- 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌Server,默认端口9999;
|
|
|
|
|
- 2、“执行器”执行任务逻辑;
|
|
|
|
|
- 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 5.6.2 通讯数据加密
|
|
|
|
|
调度中心向执行器发送的调度请求时使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化,并进行数据协议以及时间戳检验,从而达到数据加密的功能;
|
|
|
|
|
@ -1697,11 +1723,12 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
|
|
|
|
|
### 5.7 任务注册, 任务自动发现
|
|
|
|
|
自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
|
|
|
|
|
|
|
|
|
|
AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
|
|
|
|
|
注册表: 见"xxl_job_registry"表, "执行器" 在进行任务注册时将会周期性维护一条注册记录,即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表;
|
|
|
|
|
执行器注册: 任务注册Beat周期默认30s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间为三倍Beat;
|
|
|
|
|
执行器注册摘除:执行器销毁时,将会主动上报调度中心并摘除对应的执行器机器信息,提高心跳注册的实时性;
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
|
|
|
|
|
注册表: 见"xxl_job_registry"表, "执行器" 在进行任务注册时将会周期性维护一条注册记录,即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表;
|
|
|
|
|
执行器注册: 任务注册Beat周期默认30s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间为三倍Beat;
|
|
|
|
|
执行器注册摘除:执行器销毁时,将会主动上报调度中心并摘除对应的执行器机器信息,提高心跳注册的实时性;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;
|
|
|
|
|
|
|
|
|
|
@ -1718,12 +1745,15 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
|
|
|
|
|
"分片广播" 和普通任务开发流程一致,不同之处在于可以获取分片参数,获取分片参数进行分片业务处理。
|
|
|
|
|
|
|
|
|
|
- Java语言任务获取分片参数方式:BEAN、GLUE模式(Java)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
// 可参考Sample示例执行器中的示例任务"ShardingJobHandler"了解试用
|
|
|
|
|
int shardIndex = XxlJobHelper.getShardIndex();
|
|
|
|
|
int shardTotal = XxlJobHelper.getShardTotal();
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
- 脚本语言任务获取分片参数方式:GLUE模式(Shell)、GLUE模式(Python)、GLUE模式(Nodejs)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
// 脚本任务入参固定为三个,依次为:任务传参、分片序号、分片总数。以Shell模式任务为例,获取分片参数代码如下
|
|
|
|
|
echo "分片序号 index = $2"
|
|
|
|
|
@ -1732,8 +1762,10 @@ echo "分片总数 total = $3"
|
|
|
|
|
|
|
|
|
|
分片参数属性说明:
|
|
|
|
|
|
|
|
|
|
index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
|
|
|
|
|
total:总分片数,执行器集群的总机器数量;
|
|
|
|
|
```
|
|
|
|
|
index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
|
|
|
|
|
total:总分片数,执行器集群的总机器数量;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
该特性适用场景如:
|
|
|
|
|
- 1、分片任务场景:10个执行器的集群来处理10w条数据,每台机器只需要处理1w条数据,耗时降低10倍;
|
|
|
|
|
@ -1768,10 +1800,10 @@ echo "分片总数 total = $3"
|
|
|
|
|
### 5.13 任务执行结果说明
|
|
|
|
|
系统根据以下标准判断任务执行结果,可参考之。
|
|
|
|
|
|
|
|
|
|
-- | Bean/Glue(Java) | Glue(Shell) 等脚本任务
|
|
|
|
|
--- | --- | ---
|
|
|
|
|
成功 | IJobHandler.SUCCESS | 0
|
|
|
|
|
失败 | IJobHandler.FAIL | -1(非0状态码)
|
|
|
|
|
| -- | Bean/Glue(Java) | Glue(Shell) 等脚本任务 |
|
|
|
|
|
|----|---------------------|-------------------|
|
|
|
|
|
| 成功 | IJobHandler.SUCCESS | 0 |
|
|
|
|
|
| 失败 | IJobHandler.FAIL | -1(非0状态码) |
|
|
|
|
|
|
|
|
|
|
### 5.14 任务超时控制
|
|
|
|
|
支持设置任务超时时间,任务运行超时的情况下,将会主动中断任务;
|
|
|
|
|
@ -2105,7 +2137,6 @@ Header:
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 七、版本更新日志
|
|
|
|
|
### 7.1 版本 V1.1.x,新特性[2015-12-05]
|
|
|
|
|
**【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本】**
|
|
|
|
|
@ -2125,16 +2156,18 @@ Header:
|
|
|
|
|
- 4、支持“任务日志”;
|
|
|
|
|
- 5、支持“串行执行”,并行执行;
|
|
|
|
|
|
|
|
|
|
说明:V1.2版本将系统架构按功能拆分为:
|
|
|
|
|
|
|
|
|
|
- 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求;
|
|
|
|
|
- 执行模块(执行器):负责接收调度请求并执行任务逻辑;
|
|
|
|
|
- 通讯模块:负责调度模块和任务模块之间的信息通讯;
|
|
|
|
|
优点:
|
|
|
|
|
|
|
|
|
|
- 解耦:任务模块提供任务接口,调度模块维护调度信息,业务相互独立;
|
|
|
|
|
- 高扩展性;
|
|
|
|
|
- 稳定性;
|
|
|
|
|
说明:V1.2版本将系统架构按功能拆分为:
|
|
|
|
|
```
|
|
|
|
|
- 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求;
|
|
|
|
|
- 执行模块(执行器):负责接收调度请求并执行任务逻辑;
|
|
|
|
|
- 通讯模块:负责调度模块和任务模块之间的信息通讯;
|
|
|
|
|
```
|
|
|
|
|
优点:
|
|
|
|
|
```
|
|
|
|
|
- 解耦:任务模块提供任务接口,调度模块维护调度信息,业务相互独立;
|
|
|
|
|
- 高扩展性;
|
|
|
|
|
- 稳定性;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 7.3 版本 V1.3.0,新特性[2016-05-19]
|
|
|
|
|
- 1、遗弃“本地任务”模式,推荐使用“远程任务”,易于系统解耦,任务对应的JobHandler统称为“执行器”;
|
|
|
|
|
@ -2148,11 +2181,13 @@ Header:
|
|
|
|
|
|
|
|
|
|
### 7.4 版本 V1.3.1,新特性[2016-05-23]
|
|
|
|
|
- 1、更新项目目录结构:
|
|
|
|
|
```
|
|
|
|
|
- /xxl-job-admin -------------------- 【调度中心】:负责管理调度信息,按照调度配置发出调度请求;
|
|
|
|
|
- /xxl-job-core ----------------------- 公共依赖
|
|
|
|
|
- /xxl-job-executor-example ------ 【执行器】:负责接收调度请求并执行任务逻辑;
|
|
|
|
|
- /db ---------------------------------- 建表脚本
|
|
|
|
|
- /doc --------------------------------- 用户手册
|
|
|
|
|
```
|
|
|
|
|
- 2、在新的目录结构上,升级了用户手册;
|
|
|
|
|
- 3、优化了一些交互和UI;
|
|
|
|
|
|
|
|
|
|
@ -2608,7 +2643,6 @@ public void execute() {
|
|
|
|
|
- 3、【修复】漏洞修复,包括:"CVE-2022-43402" groovy低版本漏洞修复;"CVE-2024-29025" netty低版本漏洞修复;"CVE-2024-3366" freemarker模板注入漏洞修复;"CVE-2022-43183" 越权漏洞增强修复;
|
|
|
|
|
- 4、【修复】调度日志页面XSS问题修复(ISSUE-3360)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 7.35 版本 v2.4.2 Release Notes[2024-11-16]
|
|
|
|
|
- 1、【优化】调度中心任务Next计算逻辑调整,避免Cron解析失败导致重复执行问题。
|
|
|
|
|
- 2、【优化】Cron解析组件代码重构微调,健壮性提升;
|
|
|
|
|
@ -2855,13 +2889,12 @@ alter table xxl_job_log
|
|
|
|
|
- 9、【优化】低层守护线程升级切换CyclicThread,提升稳定性以及可维护性;
|
|
|
|
|
- 10、【优化】调度中心UI交互优化,任务及日志列表下拉框支持模糊搜索,提升多任务情况下交互体验;
|
|
|
|
|
|
|
|
|
|
### 7.46 版本 v3.4.2 Release Notes[ING]
|
|
|
|
|
### 7.46 版本 v3.4.2 Release Notes[2026-06-19]
|
|
|
|
|
- 1、【升级】PowerShell类型GLUE任务,升级使用 PowerShell7(pwsh命令)执行,提升性能、编码兼容性以及跨平台适配性;
|
|
|
|
|
(注意:对应执行器需要安装PowerShell 7.0以上版本,从而支持 pwsh 命令)
|
|
|
|
|
(注意:执行器所在机器需要安装 PowerShell 7.0 及以上版本,从而支持 pwsh 命令)
|
|
|
|
|
- 2、【修复】调度日志列表日期处理逻辑修复,兼容执行信息为空阻塞列表加载问题;
|
|
|
|
|
- 3、【安全】任务RollingLog权限校验完善,防止越权查看任务日志;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 7.47 版本 v3.5.0 Release Notes[ING]
|
|
|
|
|
- 1、【TODO】AccessToken线上化管理:执行期维度,限制操作当前执行期;
|
|
|
|
|
- 2、【TODO】调度中心OpenAPI增强:提供任务管理能力;封装Agent Skill并推送ClawHub;
|
|
|
|
|
|