中卫网站建设,做织梦网站的心得体会,名字logo设计在线生成,河北省造价信息价查询目录
一、简介
1.1 概述
1.2 社区交流
1.3 特性
1.4 架构设计
1.4.1 设计思想
1.4.2 系统组成
1.4.3 调度模块剖析
1#xff09; quartz的不足
1.5、同类型框架对比
1.6 下载
1.6.1 文档地址
1.7 环境
二、XXL-JOB安装部署
2.1、配置部署“调度中心”
1…目录
一、简介
1.1 概述
1.2 社区交流
1.3 特性
1.4 架构设计
1.4.1 设计思想
1.4.2 系统组成
1.4.3 调度模块剖析
1 quartz的不足
1.5、同类型框架对比
1.6 下载
1.6.1 文档地址
1.7 环境
二、XXL-JOB安装部署
2.1、配置部署“调度中心”
1从github把源码工程clone到本地 https://github.com/xuxueli/xxl-job
2按照maven格式将源码导入IDE源码结构如下
3) 执行sql生成相关表
4修改数据库配置文件application.properties
5登录的用户名和密码根据需求修改
6修改logback.xml非必需
7启动xxl_job任务调度中心
8访问web
2.2、配置部署“执行器项目”
1引入maven依赖
2执行器配置
4) 编写demo
5) 部署执行器项目
6) 配置执行器
7配置任务管理器
8执行一次任务
附常用邮箱SMTP服务器地址及端口 一、简介
1.1 概述 XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线开箱即用。
1.2 社区交流
官方地址中文版http://www.xuxueli.com/xxl-job
githuab源码 https://github.com/xuxueli/xxl-job/releases
码云地址https://gitee.com/xuxueli0323/xxl-job
XXL开源社区分布式任务调度平台XXL-JOB
1.3 特性 1、简单支持通过Web页面对任务进行CRUD操作操作简单一分钟上手 2、动态支持动态修改任务状态、启动/停止任务以及终止运行中任务即时生效 3、调度中心HA中心式调度采用中心式设计“调度中心”自研调度组件并支持集群部署可保证调度中心HA 4、执行器HA分布式任务分布式执行任务”执行器”支持集群部署可保证任务执行HA 5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时也支持手动录入执行器地址 6、弹性扩容缩容一旦有新执行器机器上线或者下线下次调度时将会重新分配任务 7、触发策略提供丰富的任务触发策略包括Cron触发、固定间隔触发、固定延时触发、API事件触发、人工触发、父子任务触发 8、调度过期策略调度中心错过调度时间的补偿处理策略包括忽略、立即补偿触发一次等 9、阻塞处理策略调度过于密集执行器来不及处理时的处理策略策略包括单机串行默认、丢弃后续调度、覆盖之前调度 10、任务超时控制支持自定义任务超时时间任务运行超时将会主动中断任务 11、任务失败重试支持自定义任务失败重试次数当任务失败时将会按照预设的失败重试次数主动进行重试其中分片任务支持分片粒度的失败重试 12、任务失败告警默认提供邮件方式失败告警同时预留扩展接口可方便的扩展短信、钉钉等告警方式 13、路由策略执行器集群部署时提供丰富的路由策略包括第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等 14、分片广播任务执行器集群部署时任务路由策略选择”分片广播”情况下一次任务调度将会广播触发集群中所有执行器执行一次任务可根据分片参数开发分片任务 15、动态分片分片广播任务以执行器为维度进行分片支持动态扩容执行器集群从而动态增加分片数量协同进行业务处理在进行大数据量业务操作时可显著提升任务处理能力和速度。 16、故障转移任务路由策略选择”故障转移”情况下如果执行器集群中某一台机器故障将会自动Failover切换到一台正常的执行器发送调度请求。 17、任务进度监控支持实时监控任务进度 18、Rolling实时日志支持在线查看调度结果并且支持以Rolling方式实时查看执行器输出的完整的执行日志 19、GLUE提供Web IDE支持在线开发任务逻辑代码动态发布实时编译生效省略部署上线的过程。支持30个版本的历史版本回溯。 20、脚本任务支持以GLUE模式开发和运行脚本任务包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本; 21、命令行任务原生提供通用命令行任务HandlerBean任务”CommandJobHandler”业务方只需要提供命令行即可 22、任务依赖支持配置子任务依赖当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔 23、一致性“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行 24、自定义任务参数支持在线配置调度任务入参即时生效 25、调度线程池调度系统多线程触发调度运行确保调度精确执行不被堵塞 26、数据加密调度中心和执行器之间的通讯进行数据加密提升调度信息安全性 27、邮件报警任务失败时支持邮件报警支持配置多邮件地址群发报警邮件 28、推送maven中央仓库: 将会把最新稳定版推送到maven中央仓库, 方便用户接入和使用; 29、运行报表支持实时查看运行数据如任务数量、调度次数、执行器数量等以及调度报表如调度日期分布图调度成功分布图等 30、全异步任务调度流程全异步化设计实现如异步调度、异步运行、异步回调等有效对密集调度进行流量削峰理论上支持任意时长任务的运行 31、跨语言调度中心与执行器提供语言无关的 RESTful API 服务第三方任意语言可据此对接调度中心或者实现执行器。除此之外还提供了 “多任务模式”和“httpJobHandler”等其他跨语言方案 32、国际化调度中心支持国际化设置提供中文、英文两种可选语言默认为中文 33、容器化提供官方docker镜像并实时更新推送dockerhub进一步实现产品开箱即用 34、线程池隔离调度线程池进行隔离拆分慢任务自动降级进入”Slow”线程池避免耗尽调度线程提高系统稳定性 35、用户管理支持在线管理系统用户存在管理员、普通用户两种角色 36、权限控制执行器维度进行权限控制管理员拥有全量权限普通用户需要分配执行器权限后才允许相关操作 1.4 架构设计 1.4.1 设计思想 将调度行为抽象形成“调度中心”公共平台而平台自身并不承担业务逻辑“调度中心”负责发起调度请求。 将任务抽象成分散的JobHandler交由“执行器”统一管理“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
因此“调度”和“任务”两部分可以相互解耦提高系统整体稳定性和扩展性
1.4.2 系统组成
调度模块调度中心 负责管理调度信息按照调度配置发出调度请求自身不承担业务代码。调度系统与任务解耦提高了系统可用性和稳定性同时调度系统性能不再受限于任务模块 支持可视化、简单且动态的管理调度信息包括任务新建更新删除GLUE开发和任务报警等所有上述操作都会实时生效同时支持监控调度结果以及执行日志支持执行器Failover。执行模块执行器 负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作开发和维护更加简单和高效 接收“调度中心”的执行请求、终止请求和日志请求等
1.4.3 调度模块剖析
1 quartz的不足
Quartz作为开源作业调度中的佼佼者是作业调度的首选。但是集群环境中Quartz采用API的方式对任务进行管理从而可以避免上述问题但是同样存在以下问题
问题一调用API的的方式操作任务不人性化问题二需要持久化业务QuartzJobBean到底层数据表中系统侵入性相当严重。问题三调度逻辑和QuartzJobBean耦合在同一个项目中这将导致一个问题在调度任务数量逐渐增多同时调度任务逻辑逐渐加重的情况下此时调度系统的性能将大大受限于业务问题四quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务会导致节点负载悬殊非常大而XXL-JOB通过执行器实现“协同分配式”运行任务充分发挥集群优势负载各节点均衡。
XXL-JOB弥补了quartz的上述不足之处。
1.5、同类型框架对比 1.6 下载
1.6.1 文档地址
中文文档
!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ --
dependencygroupIdcom.xuxueli/groupIdartifactIdxxl-job-core/artifactIdversion${最新稳定版本}/version
/dependency maven库https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core 1.7 环境
Maven3Jdk1.8Mysql5.7
二、XXL-JOB安装部署
第一步执行数据库脚本并修改XxlJobAdminApplication数据库链接配置
第二步启动XxlJobAdminApplication管理界面
第三步个人项目引入xxl_job配置类、配置文件启动
简单三步就完成了一个分布式定时任务的入门使用。
2.1、配置部署“调度中心”
1从github把源码工程clone到本地 https://github.com/xuxueli/xxl-job
2按照maven格式将源码导入IDE源码结构如下
xxl-job-admin调度中心 xxl-job-core公共依赖 xxl-job-executor-samples执行器Sample示例选择合适的版本执行器可直接使用也可以参考其并将现有项目改造成执行器 xxl-job-executor-sample-springbootSpringboot版本示例通过Springboot管理执行器 xxl-job-executor-sample-frameless无框架版本示例3) 执行sql生成相关表
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系统用户表 “调度数据库初始化SQL脚本” 位置为 doc/db/tables_xxl_job.sql 调度中心支持集群部署集群情况下各节点务必连接同一个mysql实例;
4修改数据库配置文件application.properties 调度中心配置文件地址 xxl-job-admin/src/main/resources/application.properties 修改数据库连接信息或服务端口
### web
server.port30020
server.servlet.context-path/xxl-job-admin
### 调度中心JDBC链接链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
spring.datasource.urljdbc:mysql://192.168.6.13:3306/xxl_job?useUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneAsia/Shanghai
spring.datasource.usernameroot
spring.datasource.password123456
spring.datasource.driver-class-namecom.mysql.jdbc.Driver### 报警邮箱
spring.mail.hostsmtp.qq.com
spring.mail.port25
spring.mail.username314569024qq.com
### 授权码
spring.mail.passwordxxx
spring.mail.properties.mail.smtp.authtrue
spring.mail.properties.mail.smtp.starttls.enabletrue
spring.mail.properties.mail.smtp.starttls.requiredtrue
spring.mail.properties.mail.smtp.socketFactory.classjavax.net.ssl.SSLSocketFactory
### 调度中心通讯TOKEN [选填]非空时启用访问令牌AccessToken
### 为提升系统安全性调度中心和执行器进行安全性校验双方AccessToken匹配才允许通讯
### 调度中心和执行器可通过配置项 “xxl.job.accessToken” 进行AccessToken的设置。
### 调度中心和执行器如果需要正常通讯只有两种设置
### 设置一调度中心和执行器均不设置AccessToken关闭安全性校验
### 设置二调度中心和执行器设置了相同的AccessToken
xxl.job.accessToken### 调度中心国际化配置 [必填] 默认为 zh_CN/中文简体, 可选范围为 zh_CN/中文简体, zh_TC/中文繁体 and en/英文
xxl.job.i18nzh_CN## 调度线程池最大线程配置【必填】
xxl.job.triggerpool.fast.max200
xxl.job.triggerpool.slow.max100
### 调度中心日志表数据保存天数 [必填]过期日志自动清理限制大于等于7时生效否则, 如-1关闭自动清理功能
xxl.job.logretentiondays30
5登录的用户名和密码根据需求修改
xxl.job.login.usernameadmin xxl.job.login.password123456
6修改logback.xml非必需
可以默认也可以自定义路径
property namelog.path value/xxl-job/logs/xxl-job-admin.log/
7启动xxl_job任务调度中心
可以选择直接在开发工具里边启动调度中心或者打包为jar包启动 启动命令nohup java -jar xxxx.jar /dev/null 21 查看进程ps -ef|grep xxxx.jar 8访问web http://IP或者域名:端口/xxl-job-admin/ http://127.0.0.1:30020/xxl-job-admin/ 2.2、配置部署“执行器项目” “执行器”项目xxl-job-executor-sample-springboot (提供多种版本执行器供选择现以 springboot 版本为例可直接使用也可以参考其并将现有项目改造成执行器)作用负责接收“调度中心”的调度并执行可直接部署执行器也可以将执行器集成到现有业务项目中。 以下为自建maven项目引入xxl_job示例操作
1引入maven依赖
确认pom文件中引入了 “xxl-job-core” 的maven依赖
!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ --
dependencygroupIdcom.xuxueli/groupIdartifactIdxxl-job-core/artifactIdversion${最新稳定版本}/version
/dependency maven库https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core 2执行器配置
将执行器配置文件内容拷贝到个人项目配置文件中 执行器配置配置文件地址 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties 执行器配置配置内容说明
### 调度中心部署根地址 [选填]如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行执行器心跳注册和任务结果回调为空则关闭自动注册
xxl.job.admin.addresseshttp://127.0.0.1:8080/xxl-job-admin### 执行器通讯TOKEN [选填]非空时启用
xxl.job.accessToken### 执行器AppName [选填]执行器心跳注册分组依据为空则关闭自动注册
xxl.job.executor.appnamexxl-job-executor-sample
### 执行器注册 [选填]优先使用该配置作为注册地址为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address
### 执行器IP [选填]默认为空表示自动获取IP多网卡时可手动设置指定IP该IP不会绑定Host仅作为通讯实用地址信息用于 执行器注册 和 调度中心请求并触发任务
xxl.job.executor.ip
### 执行器端口号 [选填]小于等于0则自动获取默认端口为9999单机部署多个执行器时注意要配置不同执行器端口
xxl.job.executor.port9999
### 执行器运行日志文件存储磁盘路径 [选填] 需要对该路径拥有读写权限为空则使用默认路径
xxl.job.executor.logpath/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能
xxl.job.executor.logretentiondays30
附yml文件
server:port: 8085
# xxl-job配置
xxl:job:accessToken: default_tokenadmin:# 调度中心部署跟地址 [选填]如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行执行器心跳注册和任务结果回调为空则关闭自动注册addresses: http://127.0.0.1:30020/xxl-job-adminexecutor:# 执行器注册 [选填]优先使用该配置作为注册地址为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。address:# 执行器AppName [选填]执行器心跳注册分组依据为空则关闭自动注册appname: xxl-job-test# 执行器IP [选填]默认为空表示自动获取IP多网卡时可手动设置指定IP该IP不会绑定Host仅作为通讯实用地址信息用于 执行器注册 和 调度中心请求并触发任务ip:# 执行器端口号 [选填]小于等于0则自动获取默认端口为9999单机部署多个执行器时注意要配置不同执行器端口port: 9999# 执行器运行日志文件存储磁盘路径 [选填] 需要对该路径拥有读写权限为空则使用默认路径logpath:# 执行器日志文件保存天数 [选填] 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能logretentiondays: 15# 执行器通讯TOKEN [选填]非空时启用
logging:config: classpath:logback.xml
spring:mail:host: smtp.qq.comport: 25username: 31456904qq.compassword: das3) 执行器组件配置
将执行器组件拷贝到个人项目
执行器组件配置文件地址 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java 执行器组件配置内容说明
Bean
public XxlJobSpringExecutor xxlJobExecutor() {logger.info( xxl-job config init.);XxlJobSpringExecutor xxlJobSpringExecutor new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;
}
4) 编写demo
BEAN模式类形式Bean模式任务支持基于类的开发方式每个任务对应一个Java类。
优点不限制项目环境兼容性好。即使是无框架项目如main方法直接启动的项目也可以提供支持可以参考示例项目 “xxl-job-executor-sample-frameless”缺点 每个任务需要占用一个Java类造成类的浪费不支持自动扫描任务并注入到执行器容器需要手动注入。
步骤一执行器项目中开发Job类
开发一个继承自com.xxl.job.core.handler.IJobHandler的JobHandler类实现其中任务方法。
2、手动通过如下方式注入到执行器容器。XxlJobExecutor.registJobHandler(demoJobHandler, new DemoJobHandler());
步骤二调度中心新建调度任务
后续步骤和 “BEAN模式方法形式”一致可以前往参考 GLUE模式(Java)
任务以源码方式维护在调度中心支持通过Web IDE在线更新实时编译和生效因此不需要指定JobHandler。开发流程如下
步骤一调度中心新建调度任务
参考下文“配置属性详细说明”对新建的任务进行参数配置运行模式选中 “GLUE模式(Java)” 步骤二开发任务代码
选中指定任务点击该任务右侧“GLUE”按钮将会前往GLUE任务的Web IDE界面在该界面支持对任务代码进行开发也可以在IDE中开发完成后复制粘贴到编辑中。
版本回溯功能支持30个版本的版本回溯在GLUE任务的Web IDE界面选择右上角下拉框“版本回溯”会列出该GLUE的更新历史选择相应版本即可显示该版本代码保存后GLUE代码即回退到对应的历史版本 BEAN模式方法形式Bean模式任务支持基于方法的开发方式每个任务对应一个方法。
优点 每个任务只需要开发一个方法并添加”XxlJob”注解即可更加方便、快速。支持自动扫描任务并注入到执行器容器。缺点要求Spring容器环境基于方法开发的任务底层会生成JobHandler代理和基于类的方式一样任务也会以JobHandler的形式存在于执行器任务容器中。 步骤一执行器项目中开发Job方法
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.service.jobhandler.SampleXxlJob 如下
XxlJob(demoJobHandler)
public void demoJobHandler() throws Exception {XxlJobHelper.log(XXL-JOB, Hello World.);
} package com.example.demo.demo;import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;/*** ClassName: demojob* author: dyt* since: 2023/02/06 下午 4:52*/Component
public class DemoJob {XxlJob(testQuartz)public void testQuartz(){String jobParam XxlJobHelper.getJobParam(); // 获取任务参数System.out.println(执行的定时任务);}
}
步骤二调度中心新建调度任务
详见后续第六和第七步本文采用方BEAN模式方法形式演示xxl_job效果 小结工作中常用模式就是BEAN模式方法形式或者类形式其他形式参考开源中文手册 5) 部署执行器项目
如果已经正确进行上述配置可将执行器项目编译打部署部署方式如下。 启动项目提示 xxl-job remoting server start success, nettype class com.xxl.job.core.server.EmbedServer, port 9999则代表集成成功 至此“执行器”项目已经部署结束。
6) 配置执行器
Appname:与项目配置文件xxl.job.executor.appname保持一致。
名称自定义
注册方式自动注册也可手动填写 由于系统初始化默认存在示例执行器在引入个人项目时若未修改配置文件中示例执行器名称则在启动项目后登录任务调度中心进入执行器管理模块看到存在一个示例执行器且online机器地址可以查看代表个人集成xxl_job示例项目demo3自动注册成功集成项目启动后自动注册执行器到调度中心此时可查看执行器机器地址 7调度中心新建调度任务
本文使用的bean模式所以运行模式选择 BEAN
BEAN模式参考下文“配置属性详细说明”对新建的任务进行参数配置运行模式选中 “BEAN模式”JobHandler属性填写任务注解“XxlJob”中定义的值 GLUE模式(Java)任务以源码方式维护在调度中心支持通过Web IDE在线更新实时编译和生效因此不需要指定JobHandler。开发流程如下
步骤一调度中心新建调度任务
参考上文“配置属性详细说明”对新建的任务进行参数配置运行模式选中 “GLUE模式(Java)”
步骤二开发任务代码
选中指定任务点击该任务右侧“GLUE”按钮将会前往GLUE任务的Web IDE界面在该界面支持对任务代码进行开发也可以在IDE中开发完成后复制粘贴到编辑中。
版本回溯功能支持30个版本的版本回溯在GLUE任务的Web IDE界面选择右上角下拉框“版本回溯”会列出该GLUE的更新历史选择相应版本即可显示该版本代码保存后GLUE代码即回退到对应的历史版本 1.执行器
建立的项目执行器下拉选择
2.任务描述 自定义描述内容
3.Cron表达式 这个参数表示你要多久什么时候去调用这个任务调用时间可根据需求自定义
xxl-job的表达式由7个部分组成各个位置的取值范围 秒数 分钟 小时 日期 月份 星期 年份(可为空)} */5 * * * * ? 秒 0-59 , - * 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 可以用0-11 或用字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示 星期 1-7 或者 SUN-SAT , - * ? / L C # 可以用数字1-7表示1 星期日或用字符口串“SUN, MON, TUE, WED, THU, FRI and SAT”表示 年可选 留空, 1970-2099 , - * / 也可以通过cron在线表达式生成器直接生成在线Cron表达式生成器
4.JobHandler 这个参数就是代码里面定义的任务唯一标识与测试demo类中 注解XxlJob(testQuartz)中名称一致 5.任务参数 传递给后台代码的参数值
6.子任务ID
当有任务需要相互依赖时使用比如在对账业务里下载对账文件任务成功之后才开始对账。那么可以把这几个任务当成一个大任务来串行处理即在一个任务的末尾触发另一个任务。
如果我们需要在本任务执行结束并且执行成功的时候触发另外一个任务那么就可以把另外的任务作为本任务的子任务运行就只需要在本任务里填入另外一个任务的jobId即可(可以在任务列表查看JobId)
配置属性详细说明
触发配置- 调度类型无该类型不会主动触发调度CRON该类型将会通过CRON触发任务调度固定速度该类型将会以固定速度触发任务调度按照固定的间隔时间周期性触发固定延迟该类型将会以固定延迟触发任务调度按照固定的延迟时间从上次调度结束后开始计算延迟时间到达延迟时间后触发下次调度- CRON触发任务执行的Cron表达式- 固定速度固定速度的时间间隔单位为秒- 固定延迟固定延迟的时间间隔单位为秒
任务配置- 运行模式BEAN模式任务以JobHandler方式维护在执行器端需要结合 JobHandler 属性匹配执行器中任务GLUE模式(Java)任务以源码方式维护在调度中心该模式的任务实际上是一段继承自IJobHandler的Java类代码并 groovy 源码方式维护它在执行器项目中运行可使用Resource/Autowire注入执行器里中的其他服务GLUE模式(Shell)任务以源码方式维护在调度中心该模式的任务实际上是一段 shell 脚本GLUE模式(Python)任务以源码方式维护在调度中心该模式的任务实际上是一段 python 脚本GLUE模式(PHP)任务以源码方式维护在调度中心该模式的任务实际上是一段 php 脚本GLUE模式(NodeJS)任务以源码方式维护在调度中心该模式的任务实际上是一段 nodejs 脚本GLUE模式(PowerShell)任务以源码方式维护在调度中心该模式的任务实际上是一段 PowerShell 脚本- JobHandler运行模式为 BEAN模式 时生效对应执行器中新开发的JobHandler类“JobHandler”注解自定义的value值- 执行参数任务执行所需的参数
高级配置- 路由策略当执行器集群部署时提供丰富的路由策略包括FIRST第一个固定选择第一个机器LAST最后一个固定选择最后一个机器ROUND轮询RANDOM随机随机选择在线的机器CONSISTENT_HASH一致性HASH每个任务按照Hash算法固定选择某一台机器且所有任务均匀散列在不同机器上。LEAST_FREQUENTLY_USED最不经常使用使用频率最低的机器优先被选举LEAST_RECENTLY_USED最近最久未使用最久未使用的机器优先被选举FAILOVER故障转移按照顺序依次进行心跳检测第一个心跳检测成功的机器选定为目标执行器并发起调度BUSYOVER忙碌转移按照顺序依次进行空闲检测第一个空闲检测成功的机器选定为目标执行器并发起调度SHARDING_BROADCAST(分片广播)广播触发对应集群中所有机器执行一次任务同时系统自动传递分片参数可根据分片参数开发分片任务- 子任务每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取)当本任务执行结束并且执行成功时将会触发子任务ID所对应的任务的一次主动调度。- 调度过期策略- 忽略调度过期后忽略过期的任务从当前时间开始重新计算下次触发时间- 立即执行一次调度过期后立即执行一次并从当前时间开始重新计算下次触发时间- 阻塞处理策略调度过于密集执行器来不及处理时的处理策略单机串行默认调度请求进入单机执行器后调度请求进入FIFO队列并以串行方式运行丢弃后续调度调度请求进入单机执行器后发现执行器存在运行的调度任务本次请求将会被丢弃并标记为失败覆盖之前调度调度请求进入单机执行器后发现执行器存在运行的调度任务将会终止运行中的调度任务并清空队列然后运行本地调度任务- 任务超时时间支持自定义任务超时时间任务运行超时将会主动中断任务- 失败重试次数支持自定义任务失败重试次数当任务失败时将会按照预设的失败重试次数主动进行重试
8执行一次任务
选择操作执行一次查看测试项目控制台以及调度日志 执行成功
三、通讯模块剖析
3.1 一次完整的任务调度通讯流程 - 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务实际上是一台内嵌Server默认端口9999;- 2、“执行器”执行任务逻辑- 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务是针对执行器开放一套API服务;3.2、任务注册, 任务自动发现
自v1.5版本之后, 任务取消了”任务执行机器”属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。 AppName: 每个执行器机器集群的唯一标示, 任务注册以 执行器 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;注册表: 见xxl_job_registry表, 执行器 在进行任务注册时将会周期性维护一条注册记录即机器地址和AppName的绑定关系; 调度中心 从而可以动态感知每个AppName在线的机器列表;执行器注册: 任务注册Beat周期默认30s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间为三倍Beat; 执行器注册摘除执行器销毁时将会主动上报调度中心并摘除对应的执行器机器信息提高心跳注册的实时性3.3、访问令牌AccessToken
为提升系统安全性调度中心和执行器进行安全性校验双方AccessToken匹配才允许通讯
调度中心和执行器可通过配置项 “xxl.job.accessToken” 进行AccessToken的设置。
调度中心和执行器如果需要正常通讯只有两种设置
设置一调度中心和执行器均不设置AccessToken关闭安全性校验设置二调度中心和执行器设置了相同的AccessToken
3.4、任务超时控制
支持设置任务超时时间任务运行超时的情况下将会主动中断任务
需要注意的是任务超时中断时与任务终止机制可查看“4.9 终止运行中的任务”类似也是通过 “interrupt” 中断任务因此业务代码需要将 “InterruptedException” 外抛否则功能不可用。
3.5、任务失败告警
默认提供邮件失败告警可扩展短信、钉钉等方式。如果需要新增一种告警方式只需要新增一个实现 “com.xxl.job.admin.core.alarm.JobAlarm” 接口的告警实现即可。可以参考默认提供邮箱告警实现 “EmailJobAlarm”。
3.6、避免任务重复执行
调度密集或者耗时任务可能会导致任务阻塞集群情况下调度组件小概率情况下会重复触发 针对上述情况可以通过结合 “单机路由策略如第一台、一致性哈希” “阻塞策略如单机串行、丢弃后续调度” 来规避最终避免任务重复执行。
3.7、日志自动清理
XXL-JOB日志主要包含如下两部分均支持日志自动清理说明如下
调度中心日志表数据可借助配置项 “xxl.job.logretentiondays” 设置日志表数据保存天数过期日志自动清理详情可查看上文配置说明执行器日志文件数据可借助配置项 “xxl.job.executor.logretentiondays” 设置日志文件数据保存天数过期日志自动清理详情可查看上文配置说明
附常用邮箱SMTP服务器地址及端口
常用邮箱SMTP服务器地址及端口POP3服务器地址及端口QQ邮箱smtp.qq.com端口25pop.qq.com端口110QQ企业邮箱pop.exmail.qq.com SSL启用 端口995smtp.exmail.qq.comSSL启用 端口587/465126邮箱pop.126.com端口110smtp.126.com端口25报警邮件配置(发送者),需要在对应邮箱设置中开启SMTP获取授权码