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精选系列,会持续更新,想了解的朋友可以关注 ,文章有帮助的话可以长按点赞有惊喜!!!文章比较长,大家可以先 收藏转发后再看有什么补充可以在下面评论,谢谢大家

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐