xxl-job使用总结

xxl-job从入门到入土

xxl-job介绍

xxl-job是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。xxl-job支持调度中心集群和执行器集群。

xxl-job开源项目

xxl-job使用

xxl-job整合SpringBoot

  1. 引入xxl-job的依赖
        <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.0</version></dependency>
  1. xxl-job执行器配置
@Configuration
@Slf4j
public class XxlJobConfig {@Value("${xxl.job.admin.address}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.address}")private String address;@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;/*** 执行器*/@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {XxlJobSpringExecutor executor = new XxlJobSpringExecutor();//调度中心地址executor.setAdminAddresses(adminAddresses);//执行器名称executor.setAppname(appname);//执行器地址executor.setAddress(address);//执行器ipexecutor.setIp(ip);//执行器端口,如果集单机群部署,则执行器的端口需要不一样executor.setPort(port);//需要和调度中心配置文件中的配置一致executor.setAccessToken(accessToken);//执行器日志存储路径executor.setLogPath(logPath);//执行器日志文件保存天数,过期日志自动清理, 大于等于3时生效; 否则, 如-1, 关闭自动清理功能;executor.setLogRetentionDays(logRetentionDays);return executor;}}
  1. application.yml文件
xxl:job:accessToken: default_token  #与xxl-job-admin配置一致admin:address: http://localhost:8080/xxl-job-admin  #xxl-job-admin地址executor:  #执行器配置,执行器就是被调度中心调度的任务appname: xxl-job-executor-testaddress: http://127.0.0.1:9986ip: 127.0.0.1port: 9986logpath: /data/applogs/xxl-job/jobhandler  #日志路径logretentiondays: -1  #执行器日志文件保存天数 [选填] : 过期日志自动清理, 大于等于3时生效; 否则, 如-1, 关闭自动清理功能spring:application:name: xxl-job-executorautoconfigure:exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
server:port: 9987  #应用的port和执行器的port需要不一致,不然启动会报错

到这里为止,执行器的配置就完成了,但是项目不能正常启动,因为需要调度中心。

  1. 下载xxl-job项目,启动调度中心应用,在调度中心中创建执行器,执行器的AppName需要和执行器的配置文件中的appname保持一致,注册方式选择自动注册后,如果执行器能注册到调度中心,则会自动获取到执行器的地址,如果没有获取到地址后面执行会报错
    在这里插入图片描述
  2. 启动执行器,看执行器的机器地址是否为空就能知道执行器有没有成功注册了

定时任务

注册定时任务有两种方式,一种是继承IJobHanlder类,还有一种是使用@xxlJob注解

继承IJobHanlder

继承IJobHanlder类后,需要使用执行器的registerHandler方法注册到执行器中,不然会执行任务会报错。

@Component("testJobHandler")
public class TestJobHandler extends IJobHandler {private Logger logger = LoggerFactory.getLogger(TestJobHandler.class);@Overridepublic void execute() throws Exception {logger.info("TestJobHandler execute ......");}}

使用执行器注册该任务

executor.registJobHandler("testJobHandler", new TestJobHandler());

不推荐使用这种方式注册任务。

@xxlJob

使用注解的缺点是需要在调度中心后台手动配置任务

    /*** 这里需要返回一个结果,否则任务调度中心上调度日志的执行结果显示成功,但是调度结果显示失败*/@XxlJob("testJob1")public ReturnT<String> executeJob() {logger.info("testJob1 executor: " + serverPort);return ReturnT.SUCCESS;}

在调度中心配置对应任务,JobHandler需要和注解中的"testJob1"保持一致
在这里插入图片描述

对于需要手动注册定时任务的问题,网上有相应的解决方案
魔改xxl-job,彻底告别手动配置任务!

调度中心介绍

调度中心有6个大功能,需要重点关注的是任务管理和执行器管理。
在这里插入图片描述

执行器管理

执行器管理的配置不多,比较简单,上文中已经介绍了,这里就不多说了。
在这里插入图片描述

任务管理

一个任务有下图所示的配置。
在这里插入图片描述

  1. 基础配置
  2. 报警邮件:
  3. 调度配置:设置任务的执行周期,执行一次还是周期性执行
任务配置
  1. 运行模式
    • Bean:上文提到的两种定时任务的运行模式都是Bean
    • GLUE:将定时任务的执行逻辑以代码的形式直接嵌入到执行器中。这种方式适用于需要频繁更新任务逻辑的场景
GLUE模式

创建一个GLUE模式的任务,可以看到此时JobHandler是只读的。
在这里插入图片描述
在列表上选择GLUE模式的任务,操作红会有一个GLUE IDE,点击这个按钮
在这里插入图片描述
输入需要执行的逻辑即可,建议在IDE中写好,直接复制过去。在GLUE任务的代码里面也是可以@Autowired等注解的,写好后保存即可。
在这里插入图片描述

高级配置
  1. 路由模式:将一个任务分发到多个执行器上执行的方式
    • 广播模式:所有执行器都会接收到任务并执行
    • 分片模式:将任务分片,每个执行器执行其中的一部分
    • 固定模式:指定某个执行器执行任务
    • 轮询模式:按照轮询的模式选择执行
  2. 调度过期策略:当任务执行超过预定时间后如何处理
    • 忽略:当调度中心错过调度时间时,忽略此次调度,不再进行补偿处理
    • 立即执行一次:当调度中心错过调度时间时,立即进行一次补偿触发,以确保任务能够被执行
  3. 阻塞处理策略
    • 单机串行:默认的阻塞处理策略,当任务队列中的任务数量达到上限时,新的任务请求会在当前执行器中串行执行
    • 弃后续调度:当任务队列中的任务数量达到上限时,新的任务请求会被直接丢弃
    • 覆盖之前调度:当任务队列中的任务数量达到上限时,新的任务请求会覆盖之前的任务请求

集群

调度中心集群

XXL-JOB调度中心集群部署配置

执行器集群

xxl-job执行器集群部署及路由策略实践

微服务架构下执行器的整合

主要是两种思路:

  1. 将执行器整合到业务的服务实例中,比如将执行器和任务都放在库存服务中
  2. 单独抽出一个执行器服务,通过Feign调用其它业务服务

参考

  • xxl-job执行器集群部署及路由策略实践
  • XXL-JOB调度中心集群部署配置
  • xxl-job

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

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

相关文章

ArcGIS核密度分析(栅格处理范围与掩膜分析)

多时候我们在进行栅格分析的时候&#xff0c;处理的结果不能完全覆盖我们需要的范围。 比如&#xff0c;我们对点数据进行密度分析、栅格插值等。比如下图 为什么会如此呢&#xff1f; 那是因为在做这个密度分析或者栅格插值的时候&#xff0c;默认是以点的四至范围来生成的&am…

LeetCode 热题 100 回顾9

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

算法之逻辑斯蒂回归(Logistic regression)

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;是统计学中一种广泛应用于二分类问题的算法。它的主要目标是预测二分类问题中的事件发生的概率。尽管名字里有“回归”&#xff0c;但逻…

2024已然过半,AI技术卷到哪儿了?

可以说&#xff0c;科技的发展真的是日新月异&#xff0c;2024年年初&#xff0c;大模型Sora的出现&#xff0c;改变了短视频行业的演变方向&#xff0c;使得AI技术不再只是停留在文生文&#xff0c;文生图阶段&#xff0c;而是发展到了文生视频领域。2024年5月&#xff0c;回忆…

Java笔试面试题AI答之设计模式(5)

文章目录 21. 简述Java什么是适配器模式 ?适配器模式的主要组成部分包括&#xff1a;适配器模式的实现方式主要有两种&#xff1a;适配器模式的优点&#xff1a;适配器模式的缺点&#xff1a;示例说明&#xff1a; 22. 请用Java代码实现适配器模式的案例 &#xff1f; 21. 简述…

OpenCL 学习(2)---- OpenCL Platform 和 Device

目录 OpenCL PlatformOpenCL Device参考代码 OpenCL Platform opencl 支持的 Platform 可以使用 clGetPlatformIDs 函数查询&#xff0c;函数原型如下&#xff1a; clGetPlatformIDs(cl_uint /* num_entries */,cl_platform_id * /* platforms */,cl_uint * …

深度之眼(三十)——pytorch(一)--深入浅出pytorch(附安装流程)

文章目录 一、前言一、pytoch二、六个部分三、如何学习四、学习路径&#xff08;重要)五、安装pytorch5.1 坑15.2 坑2 一、前言 我看了下目录 第一章和第二章都是本科学的数字图像处理。 也就是这一专栏&#xff1a;数字图像实验。 所以就不准备学习前两章了&#xff0c;直接…

神奇的可变模板参数的应用(C++标准库双向链表 list 中的emplace函数实现)

我们先来看一个可以构造任意对象的函数&#xff1a; /// <summary> /// 可以构造任意对象的函数 /// </summary> /// <typeparam name"MyClass">要转换对象的类型</typeparam> /// <typeparam name"...MyClassConstructorParameterT…

新手上路:在Windows CPU上安装Anaconda和PyCharm

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一. 确认自己是CPU为什么选择CPU教程&#xff1f;GPU与CPU的区别如何判断自己是CPU 二. Anaconda 安装包 和 Pycharm 安装包步骤1&#xff1a;下载Anaconda步骤2&am…

摆脱困境并在iPhone手机上取回删除照片的所有解决方案

您是否无意中从 iPhone 中删除了照片&#xff1f;您&#xff0c;无需惊慌&#xff0c;因为您可以使用以下方法恢复所有照片。 如果您长时间使用 iPhone&#xff0c;您应该知道 iOS 提供了许多 Android 不提供的备份功能。例如&#xff0c;您的所有照片都会自动备份到 iCloud 存…

5分钟内理解 .prototype 链 | 2024

在JavaScript的世界里,原型(prototype)系统是一个常被讨论但不易掌握的概念。作为JavaScript继承模型的基石,理解原型对于构建大型应用或进行对象操作至关重要。让我们一起探索这个迷人的话题,揭开原型系统的神秘面纱。 什么是原型? 在JavaScript中,每个对象都有一个内部属性[…

常见中间件漏洞(Jboss)靶场

1.CVE-2015-7501 开启环境查看端口 http://192.168.10.194:8080/ invoker/JMXInvokerServlet 说明接⼝开放&#xff0c;此接⼝存在反序列化漏洞 下载 ysoserial ⼯具进⾏漏洞利⽤ https://github.com/frohoff/ysoserial 将反弹shell进⾏base64编码 bash -i >& /dev/…

C++ Qt 之 QPushButton 好看的样式效果实践

文章目录 1.前序2.效果演示3.代码如下 1.前序 启发于 edge 更新 web 页面&#xff0c;觉得人家做的体验挺好 决定在Qt实现&#xff0c;方便以后使用 2.效果演示 特性介绍&#xff1a; 默认蓝色鼠标移入 渐变色&#xff0c;鼠标变为小手鼠标移出 恢复蓝色&#xff0c;鼠标恢…

【学习笔记】 AD24中元器件重叠系统不报错的解决方案(消除报错)

【学习笔记】 AD24中PCB设计元器件重叠后系统不报错的解决方案&#xff08;如何主动屏蔽报错&#xff09; 一、Component Clearance未开启使能的解决方案二、最小水平间距设置错误的解决方案三、未开启设计规则检查的解决方案四、设计规则检查中 “在线”和“批量”的含义五、为…

前端——JavaScript练习 做一个todoList

用前端制作一个todoList的表格&#xff0c;实现更新、删除、修改等功能。 涉及几个知识点&#xff1a; 设置最小高度&#xff08;宽度&#xff09;&#xff1a; .container{min-width: 350px;/* 最小宽度 最小不会小于210px */ } 去掉外轮廓 outline: none; 去除字…

寄存器与内存

第三课&#xff1a;寄存器与内存、中央处理器&#xff08;CPU&#xff09;、指令和程序及高级 CPU 设计-CSDN博客 锁存器 引入 ABO0&#xff08;开始状态&#xff09;001&#xff08;将A置1&#xff09;110&#xff08;将A置0&#xff09;11 无论怎么做&#xff0c;都没法从1变…

深度学习(一):神经网络入门

文章目录 一、神经网络1.1神经元结构1.2单层神经网络&#xff1a;单层感知机1.3两层神经网络&#xff1a;多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…

uniapp小程序持续获取用户位置信息,后台位置获取

做一个小程序持续获取用户位置信息的功能&#xff0c;即使小程序切换到后台也能继续获取&#xff0c;getLocation这个api只有小程序在前台才能获取位置&#xff0c;所以不用这个 先申请一个腾讯地图key 在uniapp项目配置源码视图里加上这个代码 先获取权限&#xff0c;再开启…

NtripShare测量机器人自动化监测系统测站更换仪器后重新设站

NtripShare测量机器人自动化监测系统投入商业运营已经很久了&#xff0c;在MosBox与自动优化网平差技术的加持下&#xff0c;精度并不让人担心&#xff0c;最近基于客户需求处理了两个比较大的问题。 1、增加对反射片和免棱镜的支持。 2、进一步优化测站更换仪器或重新整平后重…

批量归一化与层归一化的区别

batch-normalization是根据每一列的特征进行批量归一化&#xff0c;把一个batch&#xff08;N张图片&#xff09;中同一通道的特征(w*h的特征图)&#xff0c;将其标准化。可以理解为对batch中的所有图的每一层像素(也就是不同的通道)进行标准化。通常在图像领域用的多&#xff…