《github精选系列》——分布式任务调度平台XXL-JOB
1 简单总结1 说明2 特点3 搭建调度中心架构图git地址:https://gitee.com/xuxueli0323/xxl-job2 主要介绍2.1 说明XXL-JOB是一个分布式任务调度框架,核心设计目标是快速开发、学习简单、轻量级、易扩展。2.2 特点1.简单:支持通过网页对任务进行CRUD操作,操作简单,一分钟上手;2.动态:支持动态修改任务状态、暂停/恢复任务、终止正在运行的任务,即
1 简单总结
1 说明
2 特点
3 搭建调度中心
架构图
git地址:https://gitee.com/xuxueli0323/xxl-job
2 主要介绍
2.1 说明
XXL-JOB是一个分布式任务调度框架,核心设计目标是快速开发、学习简单、轻量级、易扩展。
2.2 特点
1.简单:支持通过网页对任务进行CRUD操作,操作简单,一分钟上手;
2.动态:支持动态修改任务状态、暂停/恢复任务、终止正在运行的任务,即时生效;
3.调度中心HA(中心型):调度中心设计,“调度中心”基于Quartz的集群实现,可以保证调度-中心HA;
4.Executor HA(Distributed):任务分布式执行,任务“执行者”支持集群部署,保证任务执行HA;
5.Task Failover:部署Excutor集群,当路由器的策略选择“failover”时,任务会平滑切换执行器;
6.一致性:“调度中心”通过DB锁保证集群分布式调度的一致性,一个任务执行一次;
7.自定义任务参数:支持在线配置调度任务导入参数,即时生效;
8.调度线程池:调度系统多线程触发调度操作,保证调度准确,不阻塞;
9.弹性扩容:一旦新的执行机上线或下线,下次调度将重新分配任务;
10.邮件告警:任务失败支持邮件告警,支持配置多个邮箱发送批量告警信息;
11.状态监控:支持实时监控任务进度;
12.Rolling执行日志:支持在线查看调度结果,支持Rolling实时查看完整执行日志的执行器输出;
13.GLUE:提供Web IDE,支持在线开发任务逻辑代码,动态发布,实时编译有效,省略上线流程的部署。支持30个版本回溯的历史版本;
14.数据加密:调度中心与执行器之间的通信用于数据加密,增强调度信息的安全性;
15.Task Dependency:支持配置子任务依赖,当父任务执行结束并执行成功后会主动触发第二个任务执行,多个子任务之间用逗号隔开;
16.推送Maven中央仓库:将最新的稳定版本发送到Maven中央仓库,方便用户访问和使用;
17.任务注册:执行器定期自动注册任务,调度中心自动查找注册的任务并触发执行。还支持手动输入执行器地址;
18.Router策略:在executor集群部署时提供了丰富的路由策略,包括:first、last、poll、random、consistent HASH、最不常用、最近最少使用、failover、busy over、分片广播等。 ;
19.报表监控:支持实时查看运行数据,如任务数、调度数、执行者数等;调度报告,如调度日期分布、调度成功图等;
20.脚本任务:支持GLUE模式下脚本任务的开发和运行,包括shell、Python等类型的脚本;
21.阻塞处理策略:调度太密集,执行器来不及处理。策略包括:单机串口(默认),丢弃后面的调度,覆盖前面的调度;
22.失败处理策略:调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;
23.分片广播任务:部署执行器集群时,任务路由策略选择“分片广播”,一个任务调度会广播集群中的所有执行器执行一次,可以根据分片参数开发分片任务;
24.动态分片:分片广播任务由执行器分片,支持执行器集群动态扩容,动态增加分片数,配合业务句柄;在大数据量的操作中可以显着提高任务处理能力和速度。
25、事件触发:除了“Cron”和“Task Dependency”触发任务外,支持基于事件的触发任务。调度中心提供触发单次执行任务的API服务,可根据业务事件灵活触发。
2.3 使用步骤
抛开架构和原理,拿到一个新东西,首先让我们能够使用起来,搭建一个自己的任务
第一步: 下载源码下载地址:https://github.com/xuxueli/xx...
第二步: 执行sql文件地址:xxl-job/doc/db/tables_xxl_job.sql
第三步: 修改xxl-job-admin项目配置配置文件:application.properties配置项:
### xxl-job, datasource
spring.datasource.url=${datasource.url}
spring.datasource.username=${datasource.username}
spring.datasource.password=${datasource.password}
打包命令:
xxl-job-admin git:(master) ✗ mvn clean -U package -Dmaven.test.skip=true
启动命令:
➜ xxl-job-admin git:(master) ✗ cd target
➜ target git:(master) ✗ java -jar xxl-job-admin-2.1.0.jar
访问http://127.0.0.1:8080/xxl-job-admin 账号:admin密码:123456看到如下页面即搭建成功
编写代码
第一步: 搭建一个springboot项目,application.properties加入如下配置:
# web port
server.port=8081
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### xxl-job executor address
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job, access token
xxl.job.accessToken=
### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=-1
第二步: 编写配置类
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
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;
}
第三步: 编写jobhandler
@JobHandler(value="demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {
@Override
public ReturnT<String> execute(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
XxlJobLogger.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
return SUCCESS;
}
}
第四步: 启动springboot项目后,配置执行器
点击保存后
出现这个,即为配置成功第五步: 配置jobhandler,新增任务
第六步: 点击执行一次看看效果
到此springboot整合xxl-job就完成了,在后续添加任务时,只需要编写相应的handler去继承IJobHandler即可。
2.4 调度器的组成结构
《github精选系列》,会持续更新,想了解的朋友可以关注 ,文章有帮助的话可以长按点赞有惊喜!!!文章比较长,大家可以先 收藏、转发后再看,有什么补充可以在下面评论,谢谢大家!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)