分布式任务调度中心架构图

手赚控 234 0

分布式任务调度中心架构图

1简单总结

1说明

2特性

3搭建调度中心

构架图

git地址:

2主要介绍

2.1说明

XXL-JOB是一个分布式任务调度框架,核心设计目标是快速开发、学习简单、轻量级、易扩充。

2.2特征

1.简单:支持通过网页对任务进行CRUD操作,操作简单,一分钟上手;

2.动态:支持动态更改任务状态、暂停/恢复任务、终止正在运行的任务,即时生效;

3.调度中心HA(中心型):调度中心设计,“调度中心”基于的集群实现,可以保证调度-中心HA;

4.HA():任务分布式执行,任务“执行者”支持集群布署,保证任务执行HA;

5.Task:布署集群,当路由器的策略选择“”时,任务会平滑切换执行器;

6.一致性:“调度中心”通过DB锁保证集群分布式调度的一致性任务平台,一个任务执行一次;

7.自定义任务参数:支持在线配置调度任务导出参数,即时生效;

8.调度线程池:调度系统多线程触发调度操作,保证调度确切,不阻塞;

9.弹性扩容:一旦新的执行机上线或下线,上次调度将重新分配任务;

10.电邮告警:任务失败支持短信告警,支持配置多个邮箱发送批量告警信息;

11.状态监控:支持实时监控任务进度;

12.执行日志:支持在线查看调度结果,支持实时查看完整执行日志的执行器输出;

13.GLUE:提供WebIDE,支持在线开发任务逻辑代码,动态发布,实时编译有效,省略上线流程的布署。支持30个版本回溯的历史版本;

14.数据加密:调度中心与执行器之间的通讯用于数据加密,提高调度信息的安全性;

15.Task:支持配置子任务依赖,当父任务执行结束并执行成功后会主动触发第二个任务执行,多个子任务之间用冒号隔开;

16.推送Maven中央库房:将最新的稳定版本发送到Maven中央库房,便捷用户访问和使用;

17.任务注册:执行器定期手动注册任务,调度中心手动查找注册的任务并触发执行。还支持自动输入执行器地址;

18.策略:在集群布署时提供了丰富的路由策略,包括:first、last、poll、、HASH、最不常用、最近最少使用、、busyover、分片广播等。;

19.报表监控:支持实时查看运行数据,如任务数、调度数、执行者数等;调度报告任务平台,如调度日期分布、调度成功图等;

20.脚本任务:支持GLUE模式下脚本任务的开发和运行,包括shell、等类型的脚本;

21.阻塞处理策略:调度太密集,执行器来不及处理。策略包括:单机并口(默认),遗弃旁边的调度,覆盖后面的调度;

22.失败处理策略:调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;

23.分片广播任务:布署执行器集群时,任务路由策略选择“分片广播”,一个任务调度会广播集群中的所有执行器执行一次,可以按照分片参数开发分片任务;

24.动态分片:分片广播任务由执行器分片,支持执行器集群动态扩容,动态降低分片数,配合业务句柄;在大数据量的操作中可以显着增强任务处理能力和速率。

25、事件触发:不仅“Cron”和“Task”触发任务外,支持基于风波的触发任务。调度中心提供触发单次执行任务的API服务,可依照业务风波灵活触发。

2.3使用步骤

摒弃构架和原理,领到一个新东西,首先让我们才能使用上去,搭建一个自己的任务

第一步:下载源码下载地址:

第二步:执行sql文件地址:xxl-job/doc/db/.sql

第三步:更改xxl-job-admin项目配置配置文件:.配置项:

### 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

访问:8080/xxl-job-admin帐号:admin密码:看见如下页面即搭建成功

编撰代码

第一步:搭建一个项目,.加入如下配置:

# 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(value="demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {
    @Override
    public ReturnT 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;
    }
}

第四步:启动项目后,配置执行器

点击保存后

出现这个,即为配置成功第五步:配置,新增任务

第六步:点击执行一次瞧瞧疗效

到此整合xxl-job就完成了,在后续添加任务时,只须要编撰相应的去承继即可。

2.4调度器的组成结构

《精选系列》,会持续更新,想了解的同学可以关注,文章有帮助的话可以长按点赞有惊喜!!!文章比较长,你们可以先收藏、转发后再看,有哪些补充可以在下边评论,感谢你们!

标签: 调度 任务 集群 执行 触发