【XXL-JOB】 XXL-JOB 部署安装及使用

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。

简介

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

 

选型

框架对比(前人总结)

featurequartzelastic-job-cloudxxl-jobantaresopencron
依赖mysqljdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ ,mesosmysql ,jdk1.7+ , maven3.0+jdk 1.7+ , redis , zookeeperjdk1.7+ , Tomcat8.0+
HA多节点部署,通过竞争数据库锁来保证只有一个节点执行任务通过zookeeper的注册与发现,可以动态的添加服务器。支持水平扩容集群部署集群部署
任务分片支持支持支持
文档完善完善完善完善文档略少文档略少
管理界面支持支持支持支持
难易程度简单较复杂简单一般一般
公司OpenSymphony当当网个人个人个人
高级功能弹性扩容,多种作业模式,失效转移,运行状态收集,多线程处理数据,幂等性,容错处理,spring命名空间支持弹性扩容,分片广播,故障转移,Rolling实时日志,GLUE(支持在线编辑代码,免发布),任务进度监控,任务依赖,数据加密,邮件报警,运行报表,国际化任务分片, 失效转移,弹性扩容 ,时间规则支持quartz和crontab ,kill任务, 现场执行,查询任务运行状态
缺点没有管理界面,以及不支持任务分片等。不适用于分布式场景需要引入zookeeper , mesos, 增加系统复杂度, 学习成本较高调度中心通过获取 DB锁来保证集群中执行任务的唯一性, 如果短任务很多,随着调度中心集群数量增加,那么数据库的锁竞争会比较厉害,性能不好。不支持动态添加任务不适用于分布式场景
使用企业大众化产品,对分布式调度要求不高的公司大面积使用36氪,当当网,国美,金柚网,联想,唯品会,亚信,平安,猪八戒大众点评,运满满,优信二手车,拍拍贷

从上述对比来看,XXL-JOB简单、依赖少、文档完善、社区活跃,是个不错的选择。

 

架构

官方的架构图,一共就两大组件

调度中心——xxl-job-admin,有porta界面,可以管理控制所有的任务执行情况

执行器——需要业务方自行开发接入的,将任务托管给调度中心进行控制

 

安装部署

从github把源码工程clone到本地  https://github.com/xuxueli/xxl-job

部署起来非常简单

 

调度中心

修改xxl-job-admin的配置文件,数据地址等修改成自己的,mvn clean package打包,传到服务器上部署启动

 

执行器

参照官方示例编写自己的业务逻辑,配置好相关配置属性,可参照   https://github.com/cwtree/cube-xxl-job-executor.git

常规任务

@XxlJob("myJobHandler")
    public void myJobHandler() throws Exception {
        XxlJobHelper.log("job test ...");
        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        log.info("常规任务执行。。。");
    }

分片任务

@XxlJob("shardJobHandler")
    public void shard() throws Exception {
		// 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();
        XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);
        log.info("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);
        // 业务逻辑
        for (int i = 0; i < shardTotal; i++) {
            if (i == shardIndex) {
                XxlJobHelper.log("第 {} 片, 命中分片开始处理", i);
                log.info("第 {} 片, 命中分片开始处理", i);
            } else {
                XxlJobHelper.log("第 {} 片, 忽略", i);
                log.info("第 {} 片, 忽略", i);
            }
        }
        
        log.info("分片任务执行。。。");
    }

执行器启动后,就可以去调度中心新增任务,新增执行器管控起来了

 

 

分片任务使用场景:

订单超时场景,部署了10个进程执行器,业务逻辑是查询快要超时的订单,然后修改订单状态关闭,如果快要超时的订单过多,靠一个进程执行任务来做,可能内存溢出或超时等,此时需要将订单数据分片分到各个进程执行器里,分担执行,提高效率。

 

执行情况截图

 

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页