ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-04-08 13:34:16  阅读:268  来源: 互联网

标签:执行器 job log 部署 任务 XxlJobHelper JOB 分片 XXL


简介

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

标签:执行器,job,log,部署,任务,XxlJobHelper,JOB,分片,XXL
来源: https://blog.csdn.net/chiweitree/article/details/115517571

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有