共计 5845 个字符,预计需要花费 15 分钟才能阅读完成。
Hello,大家好,我是一个在互联网收废铁的程序员,曾经很久没有更新过文章了,明天呢,就来学习一下新的知识点吧。明天呢?咱们来讲讲什么好呢?
好吧,明天咱们就简略的来学习一下 XXL-JOB 吧
废话咱们就不必多说了吧,咱们间接进入咱们的正题
首先别慌,咱们先来看看什么是 XXL-JOB
咱们在应用任务调度的时候呢,咱们都晓得还有很多的框架,比方 Quartz,Elastic-Job,TBSchedule 等等
不过咱们要通过本人的技术选型来决定咱们想要选定哪一种
每个都有本人的优缺点,可能和这个不能满足你的需要,那么咱们就要考虑一下另外一个能不能满足呢?
废话有点多啦
简介
XXL-JOB 是一个轻量级分布式任务调度平台,其外围设计指标是开发迅速、学习简略、轻量级、易扩大。现已凋谢源代码并接入多家公司线上产品线,开箱即用。
个性
- 1、简略:反对通过 Web 页面对工作进行 CRUD 操作,操作简略,一分钟上手;
- 2、动静:反对动静批改工作状态、启动 / 进行工作,以及终止运行中工作,即时失效;
- 3、调度核心 HA(核心式):调度采纳核心式设计,“调度核心”自研调度组件并反对集群部署,可保障调度核心 HA;
- 4、执行器 HA(分布式):工作分布式执行,工作 ” 执行器 ” 反对集群部署,可保障工作执行 HA;
- 5、注册核心: 执行器会周期性主动注册工作, 调度核心将会主动发现注册的工作并触发执行。同时,也反对手动录入执行器地址;
- 6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配工作;
- 7、路由策略:执行器集群部署时提供丰盛的路由策略,包含:第一个、最初一个、轮询、随机、一致性 HASH、最不常常应用、最近最久未应用、故障转移、繁忙转移等;
- 8、故障转移:工作路由策略抉择 ” 故障转移 ” 状况下,如果执行器集群中某一台机器故障,将会主动 Failover 切换到一台失常的执行器发送调度申请。
- 9、阻塞解决策略:调度过于密集执行器来不及解决时的解决策略,策略包含:单机串行(默认)、抛弃后续调度、笼罩之前调度;
- 10、工作超时管制:反对自定义工作超时工夫,工作运行超时将会被动中断工作;
- 11、工作失败重试:反对自定义工作失败重试次数,当工作失败时将会依照预设的失败重试次数被动进行重试;其中分片工作反对分片粒度的失败重试;
- 12、工作失败告警;默认提供邮件形式失败告警,同时预留扩大接口,可不便的扩大短信、钉钉等告警形式;
- 13、分片播送工作:执行器集群部署时,工作路由策略抉择 ” 分片播送 ” 状况下,一次任务调度将会播送触发集群中所有执行器执行一次工作,可依据分片参数开发分片工作;
- 14、动静分片:分片播送工作以执行器为维度进行分片,反对动静扩容执行器集群从而动静减少分片数量,协同进行业务解决;在进行大数据量业务操作时可显著晋升工作解决能力和速度。
- 15、事件触发:除了 ”Cron 形式 ” 和 ” 工作依赖形式 ” 触发工作执行之外,反对基于事件的触发工作形式。调度核心提供触发工作单次执行的 API 服务,可依据业务事件灵便触发。
- 16、工作进度监控:反对实时监控工作进度;
- 17、Rolling 实时日志:反对在线查看调度后果,并且反对以 Rolling 形式实时查看执行器输入的残缺的执行日志;
- 18、GLUE:提供 Web IDE,反对在线开发工作逻辑代码,动静公布,实时编译失效,省略部署上线的过程。反对 30 个版本的历史版本回溯。
- 19、脚本工作:反对以 GLUE 模式开发和运行脚本工作,包含 Shell、Python、NodeJS、PHP、PowerShell 等类型脚本;
- 20、命令行工作:原生提供通用命令行工作 Handler(Bean 工作,”CommandJobHandler”);业务方只须要提供命令行即可;
- 21、工作依赖:反对配置子工作依赖,当父工作执行完结且执行胜利后将会被动触发一次子工作的执行, 多个子工作用逗号分隔;
- 22、一致性:“调度核心”通过 DB 锁保障集群散布式调度的一致性, 一次任务调度只会触发一次执行;
- 23、自定义工作参数:反对在线配置调度工作入参,即时失效;
- 24、调度线程池:调度零碎多线程触发调度运行,确保调度准确执行,不被梗塞;
- 25、数据加密:调度核心和执行器之间的通信进行数据加密,晋升调度信息安全性;
- 26、邮件报警:工作失败时反对邮件报警,反对配置多邮件地址群发报警邮件;
- 27、推送 maven 地方仓库: 将会把最新稳定版推送到 maven 地方仓库, 不便用户接入和应用;
- 28、运行报表:反对实时查看运行数据,如工作数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度胜利分布图等;
- 29、全异步:任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,无效对密集调度进行流量削峰,实践上反对任意时长工作的运行;
- 30、跨语言:调度核心与执行器提供语言无关的 RESTful API 服务,第三方任意语言可据此对接调度核心或者实现执行器。除此之外,还提供了“多任务模式”和“httpJobHandler”等其余跨语言计划;
- 31、国际化:调度核心反对国际化设置,提供中文、英文两种可选语言,默认为中文;
- 32、容器化:提供官网 docker 镜像,并实时更新推送 dockerhub,进一步实现产品开箱即用;
- 33、线程池隔离:调度线程池进行隔离拆分,慢工作主动降级进入 ”Slow” 线程池,防止耗尽调度线程,进步零碎稳定性;
- 34、用户治理:反对在线管理系统用户,存在管理员、普通用户两种角色;
- 35、权限管制:执行器维度进行权限管制,管理员领有全量权限,普通用户须要调配执行器权限后才容许相干操作;
以上呢间接能够在官网查看,嘿嘿嘿嘿嘿
好了,我就不多比比了,间接开始咱们的正题
首先呢,咱们要怎么开始咱们的第一个工作呢
咱们先去 GitHub 上拉取最新的代码
XXL_JOB
1. 疾速入门
将代码以 maven 的形式导入到咱们的 IDE 中,这里我置信大多数人都是用的 IDEA 吧,如果你的 IDE 不是这个,那么你就太掉队啦,赶快口头起来吧
这外面就显示咱们须要的模块
xxl-job-admin: 调度核心
xxl-job-core: 公共依赖
xxl-job-executor-samples:执行器实例
次要的呢还是咱们的调度核心和公共依赖这个两个模块
xxl-job-executor-sample-spring:Spring 版本,通过 Spring 容器治理执行器,比拟通用
xxl-job-executor-sample-frameless:无框架版本
xxl-job-executor-sample-springboot:Springboot 版本,通过 Springboot 治理执行器,举荐这种形式
1.1 初始化数据库
在咱们解压后的文件夹中咱们能够看见有一个 sql 文件
在 /xxl-job/doc/db/tables_xxl_job.sql
1.2 部署调度核心
调度核心我的项目:xxl-job-admin
作用:对立治理任务调度平台上调度工作,负责触发调度执行,并且提供工作治理平台,可视化操作
1.2.1 调度核心地位
首先找到咱们的 application.properties(我置信这个就不必多说了吧,置信学过 SpringBoot 的都晓得它在哪儿)
批改一下配置文件里的信息
xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
次要就是这个数据库的配置,其余先不做批改
1.2.2 启动咱们的我的项目
而后拜访咱们的 url
Http://localhost:9999(端口)/xxl-job-admin
登录账户默认是 admin 123456
就会呈现这个首页信息
到这里咱们的调度核心就配置启动好了,是不是很简略呢
2. 实现执行器工作
首先咱们能够应用我的项目外面的模板,咱们也能够本人实现
这里呢咱们就独自进去做一个
那么这个 xxl-job-admin 始终运行着
那么咱们就须要去手动创立一个 SpringBoot 我的项目
2.1 引入次要的 Pom 文件
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
</dependency>
2.2 在咱们的配置文件中增加如下信息(我这里应用的是 yml 文件)
xxl:
job:
accessToken:
admin:
addresses: http://localhost:9999/xxl-job-admin
executor:
address:
appname: xxl-job-marketing
ip:
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 30
port: 9004
字段阐明
accessToken:执行器通信 TOKEN [选填]:非空时启用;
admin.addresses:调度核心部署跟地址 [选填]:如调度核心集群部署存在多个地址则用逗号分隔。执行器将会应用该地址进行 ” 执行器心跳注册 ” 和 ” 工作后果回调 ”;为空则敞开主动注册;
exector.address:注册表地址,如果为空,则应用 ip 地址作为注册表地址
exector.appname:执行器 AppName [选填]:执行器心跳注册分组根据;为空则敞开主动注册
exector.ip:执行器 IP [选填]:默认为空示意主动获取 IP,多网卡时可手动设置指定 IP,该 IP 不会绑定 Host 仅作为通信实用;地址信息用于 “ 执行器注册 ” 和 “ 调度核心申请并触发工作 ”
exector.logpath:执行器运行日志文件存储磁盘门路 [选填]:须要对该门路领有读写权限;为空则应用默认门路;
exector.logretentiondays:执行器日志保留天数 [选填]:值大于 3 时失效,启用执行器 Log 文件定期清理性能,否则不失效
exector.port:执行器端口号 [选填]:小于等于 0 则主动获取;默认端口为 9999,单机部署多个执行器时,留神要配置不同执行器端口;
2.3 工作执行器组件配置,初始化咱们的配置信息
@Configuration
@Slf4j
public class XxlJobConfig {
@Value(“${xxl.job.admin.addresses}”)
private String adminAddresses;
@Value(“${xxl.job.accessToken}”)
private String accessToken;
@Value(“${xxl.job.executor.appname}”)
private String appname;
@Value(“${xxl.job.executor.address}”)
private String address;
@Value(“${xxl.job.executor.ip}”)
private String ip;
@Value(“${xxl.job.executor.port}”)
private int port;
@Value(“${xxl.job.executor.logpath}”)
private String logPath;
@Value(“${xxl.job.executor.logretentiondays}”)
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(“>>>>>>>>>>> xxl-job config init.”);
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
2.4 创立工作执行类
@Component
@Slf4j
public class testTask {
@XxlJob(value = “testTask”)
public ReturnT<String> testTask(String param){
log.info(“ 参数信息:” + param);
return ReturnT.SUCCESS;
}
}
这样咱们的代码就写完啦
那咱们咱们怎么去测试呢
首先来到咱们的可视化界面,点击执行器治理,增加执行器
增加执行器页面
增加胜利
来到咱们的工作治理界面,增加一个新工作
至此咱们的工作就增加胜利了,那么咱们怎么启动呢?
这个就好办啦,间接能够动一入手就完了
点击执行一次,咱们就能够在咱们的后盾看见啦
以上就是咱们的 XXL-JOB 根本教程啦,你学费了吗?
没有就多学吧,要多学多问
这样才可能疾速成长,就会越学越费
好了,明天的分享就到这里了,,,完了,老板来了。。。我先溜了
OK,在这里咱们的分享就到这里了,不晓得你有没有帮忙到你呢?
看到这里的人都是技术人才,你的浏览就是我后退的能源
欢送退出 QQ 群: