XXL-JOB 分布式任务调度平台

news2024/11/15 12:41:39

1.什么是XXL-JOB

XXL-JOB 是由国人许雪里开发的一个 开源的轻量级分布式任务调度平台

学习简单、轻量级、易扩展,开箱即用,现已开放源代码并接入200多家公司线上产品线

2.XXL-JOB设计思想

a.将调度行为抽象为调度中心公共平台,而平台本身不承担业务逻辑,调度中心负责发送调度请求

b.将任务抽象成分散的JobHandler,交由执行器统一管理,执行器负责接收调度请求,并且执行对应的业务逻辑,调度和任务完全解耦

c.调度和任务完全解耦,提高了系统稳定性和扩展性

d.其中调度中心支持可视化的动态管理调度信息

3.XXL-JOB 系统组成

调度模块(调度中心):
a.负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
b.支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。

执行模块(执行器):
负责接收调度请求执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
接收“调度中心”的执行请求、终止请求和日志请求等。

4.工程结构

xxl-job-admin:调度中心

xxl-job-core:公共依赖 xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)    

    :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;    

   :xxl-job-executor-sample-frameless:无框架版本;

5.spring-boot项目集成XXL-JOB

5.1  部署XXL-JOB

a.下载地址

https://gitee.com/xuxueli0323/xxl-job

b.本地进行编译

c.修改配置xxl-job-admin中的application.properties​​​​​​

server.port=8080
server.servlet.context-path=/xxl-job-admin
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=xxx
spring.datasource.password=xxxxx
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

### xxl-job, access token
xxl.job.accessToken=xxxxxx  

d.打包部署

部署完可以通过地址查看管理页面:http://127.0.0.1:8080/xxl-job-admin/

 5.2 引入项目

a. pom文件中引入jar包

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.2.0</version>
</dependency>

b.在配置文件中增加配置

xxl:
  job:
    accessToken: xxxxxx  #修改的token秘钥
    admin:
      addresses: http://10.1.11.60:8080/xxl-job-admin/   #上面部署xxl-job-admin地址
    executor:
      appname: dayunmotor-tsp-gateway-xxl-job  #本项目名称
      ip: 10.1.5.27 #这个是本项目部署地址和端口
      port: 30003   #注意这里不是本项目的端口是xxl-job执行请求的端口
      logpath: /data/applogs/xxl-job/jobhandler
      logretentiondays: 30

c.在项目中增加配置类

@Slf4j
@Configuration
public class XxlJobConfig {

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @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.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        log.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;
    }
}

d.增加定时任务

@Slf4j
@Component
public class RemoteUpgradeTask extends IJobHandler {

    @XxlJob(value = "remoteUpgradeTask")
    public ReturnT<String> execute(String s) throws Exception {
        try {
            log.info("执行任务");
            return IJobHandler.SUCCESS;
        } catch (Exception e) {
            log.error("执行任务异常", e);
            return new ReturnT<>(IJobHandler.FAIL.getCode(), "执行任务失败");
        }
    }
    //执行初始化方法
    @Override
    public void init() throws InvocationTargetException, IllegalAccessException {
        super.init();
    }
    //执行销毁方法
    @Override
    public void destroy() throws InvocationTargetException, IllegalAccessException {
        super.destroy();
    }
}

e.然后去xxl-job-admin中增加执行器,增加完启动项目,可以看到启动的执行器

(执行器管理中的appname与(xxl-job-executor-sample-springboot)的配置文件的xxl.job.executor.appname保持一致)

 f.配置任务管理:新增任务

 然后启动任务即可定时执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络

编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …

Java:什么是异常?什么是异常处理?

Java中的异常处理不是一个容易的话题。初学者很难理解&#xff0c;即使是经验丰富的开发人员也可以花几个小时讨论应该如何抛出或处理哪些Java异常。这就是为什么大多数开发团队都有自己的一套关于如何使用它们的规则。如果你是一个团队的新手&#xff0c;你可能会惊讶于这些规…

HR:你会Python数据分析吗?

之前看到一个段子&#xff1a; 以前去面试&#xff0c;HR会问你“精通office吗&#xff1f;” 现在去面试&#xff0c;HR会问你“会Python数据分析吗&#xff1f;” 图片来源&#xff1a;网络 大数据时代&#xff0c;无论是数据分析师、研发&#xff0c;到运营、市场、产品经…

AI 在编程、写作、绘画领域的占卜:从 GitHub Copilot 到 ChatGPT,再到 Stable Diffusion...

PS&#xff1a;就当前节点&#xff08;2023.02.22&#xff09;而言&#xff0c;我虽然研究过一段时间传统的机器学习&#xff0c;但是并不擅长深度学习等领域&#xff0c;所以很多 AI 领域相关的词汇&#xff0c;我是不擅长的&#xff0c;只为自己总结一下&#xff0c;方便在未…

Android的NDK之编译LED的动态库so和使用so

文章目录 目录 文章目录 基础信息 我的AS基础信息 gradle插件版本 硬件信息 基础知识 externalNativeBuild 具体操作步骤 下载NDK库 加入JNI相关C语言代码和mk文件 local.properties里配置ndk路径 gradle配置 配置externalNativeBuild 打包动态库 引用第三方so库…

为什么要使用微服务架构?【微服务架构出现的背景】

随着互联网技术的发展&#xff0c;传统的应用架构已满足不了实际需求&#xff0c;微服务架构就随之产生。那么传统应用架构到底出了什么问题呢?又如何解决?接下来我们将从传统单体架构的问题开始&#xff0c;对为什么需要微服务架构进行详细讲解。传统单体应用架构的问题通常…

钓鱼网站+persistence植入后门程序+创建用户

本实验实现1&#xff1a; 利用MS14-064漏洞&#xff0c;会生成一个网址&#xff0c;诱导用户点击&#xff0c;打开后&#xff0c;会直接连接到发起攻击的主机上&#xff0c;即可攻击成功。 本实验实现2&#xff1a; 一旦入侵成功&#xff0c;则拿到控制目标主机的部分权限&…

春种一粒粟:企业如何修炼好云原生内功?

日月盈昃&#xff0c;辰宿列张。寒来暑往&#xff0c;秋收冬藏。《千字文》里蕴藏了一种人与天地之间共处的智慧&#xff0c;那就是想要收获粮食&#xff0c;一定要提前播种。农耕如此&#xff0c;百业如此&#xff0c;数字化创新也是一样。数字化技术&#xff0c;已经成为全球…

速来!掘金数据时代2022年度隐私计算评选活动火热报名中!

开放隐私计算 开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号…

一月券商金工精选

✦研报目录✦ ✦简述✦ 按发布时间排序 国盛证券 “薪火”量化分析系列研究&#xff08;二&#xff09;-票据逾期数据中的选股信息 发布日期&#xff1a;2023-01-04 关键词&#xff1a;股票、票据、票据预期 主要内容&#xff1a;本文深入探讨了“票据持续逾期名单”这一…

CentOS7.6 MySQL8安装

1 检查是否安装过 MySQL rpm -qa | grep -i mysqlmariadb rpm -qa | grep mariadb2 卸载之前的安装 MySQL rpm -e --nodeps 软件名 //强力删除&#xff0c;对相关依赖的文件也进行强力删除卸载 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_643 官网下载 MySQL :: D…

kettle简单使用-将CSV转换为Excel文件_操作过程---大数据之kettle工作笔记003

做个例子把csv转换为xls文件 可以看到过程 首先右键文件 新建 转换 然后选择核心对象 输入 CSV文件输入 然后选择输出excel输出,拖拽过来 然后按住shift 然后鼠标左键,然后拉出一条线到输出 然后松开的

关于ctf中flask算pin总结

什么是pin码 pin码是flask在开启debug模式下&#xff0c;进行代码调试模式所需的进入密码&#xff0c;需要正确的PIN码才能进入调试模式,可以理解为自带的webshell pin码如何生成 pin码生成要六要素 1.username 在可以任意文件读的条件下读 /etc/passwd进行猜测 2.modname 默…

硬件系统工程师宝典(10)-----了解PI分析目标,电源完整性设计“有章可循”

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到在电源完整性分析时&#xff0c;如何合理使用去耦电容&#xff0c;知道了对于不同频率的信号噪声采用不同类型的去耦电容。今天我们来看…

【蓦然回首忆Java·基础卷Ⅰ】

文章目录开端通过引用创建对象Java的数据存储方式基本类型包装类和高精度数字操作符自动递增和自动递减老生常谈的问题&#xff1a;和equals()如何重写equals方法&#xff1f;短路字面量科学计数法位运算类型转换初始化和清理方法的重载方法的重写无参构造器this与构造器垃圾收…

51-52 - 进程状态设计

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 问题2. 进程状态设计2.1 任务生命周期2.2 任务的状态2.3 任务的生命周期与状态切换2.4 状态切换概要设计2.4.1 核心数据结构>内核队列2.4.2 KillTask() 实现思路2.4.3 整体实现规划2.4.4 编程实验&#xff1a;任务生命周期状态…

字节跳动DevOps交付流程演进之路

近年来&#xff0c;各企业都已在实践 DevOps 的流程、方法和工具&#xff0c;来提升业务价值交付的效率。不同企业的业务团队背景和基础各不相同&#xff0c;因此都在走自身的 DevOps 之路&#xff0c;往往伴随着成功的经验和失败的教训&#xff0c;了解和学习不同背景下的 Dev…

Qt 某光谱仪程序开发

某光谱仪程序开发 文章目录某光谱仪程序开发摘要安装驱动注册COM组件导出.h和.cpp在Qt 中添加源文件开发打包程序关键字&#xff1a; Demo、 Qt、 COM、 dumpcpp、 C摘要 今天接到一个临时小任务&#xff0c;写一个的项目子模块的Demo&#xff0c;以供和专家们交流一下项目技…

游戏蓝牙耳机什么牌子好?游戏蓝牙耳机性价比品牌

为了提升游戏体验&#xff0c;多数人都会选购一副蓝牙耳机&#xff0c;在网上找了当前热销的蓝牙耳机&#xff0c;终于整理出了当前热销性价比高的蓝牙耳机品牌&#xff0c;今天就带大家一起看看这几款耳机的优点&#xff0c;希望这篇文章能帮助大家选择。 一、南卡小音舱蓝牙…

JavaScript随手笔记---对比数组差异

&#x1f48c; 所属专栏&#xff1a;【JavaScript随手笔记】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…