✅技术社区—集成xxl-job实现定时任务的管理和执行

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

xxl-job是对老牌调度平台Quartz进行的封装。在开始介绍xxl-job之前我来先简单的介绍下Quartz以及对其与xxl-job做个对比。

Quartz是一款老牌的任务调度平台,他也是用Java编写的,调度模型已经非常成熟了,而且很容易集成到Spring 中去,用来执行业务是一个很好的选择。但是它也面临着一些问题,比如:

1、调度逻辑(Scheduler)和任务类耦合在同一个项目中,随着调度任务数量逐渐增多,同时调度任务逻辑逐渐加重,调度系统的整体性能会受到很大的影响,

2、Quartz 集群的节点之间负载结果是随机的,谁抢到了数据库锁就由谁去执行任务,这就有可能出现早的早死,涝的涝死的情况,发挥不了机器的性能。

3、Quartz 本身没有提供动态调度和管理界面的功能,需要自己根据API进行开发。

Quartz 的日志记录、数据统计、监控不是特别完善

xxl-job对比下来有如下特性:

1、性能的提升:可以调度更多任务,

2、可靠性的提升:任务超时、失败、故障转移的处理。

3、运维更加便捷:提供操作界面、有用户权限、详细的日志、提供通知配置、自动生成报表等等。

架构设计思想:

1、将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。

2、将任务抽象成分散的JobHandler,交由“执行器”(可以理解为就是我们的服务实例)统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。)

因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性,xxl-iob里面具体内容

原理

  1. 调度中心(Admin):作为XXL-JOB的核心组件,负责管理任务的注册、存储任务配置、调度任务执行等。调度中心提供了一个Web界面,通过这个界面,用户可以添加、修改、删除任务,以及监控任务执行的状态。
  2. 执行器(Executor):是任务执行的工作节点,负责实际执行被调度的任务。在使用XXL-JOB时,你需要在你的应用中集成执行器客户端,这样你的应用就能作为任务的执行者。

流程

  1. 集成执行器:在你的应用(比如一个Spring Boot项目)中集成XXL-JOB执行器。这通常涉及到添加Maven依赖、配置执行器的地址、端口、应用名等信息。
  2. 配置任务:在XXL-JOB调度中心的Web界面上配置任务。这包括指定任务的执行表达式(CRON表达式)、指定执行器、设置任务描述、配置任务参数等。
  3. 任务调度:基于任务配置的CRON表达式,调度中心会定时触发任务执行。调度中心通过RPC调用向指定的执行器发送执行指令。
  4. 任务执行:执行器接收到执行指令后,会根据指令内容执行相应的任务逻辑。这些任务逻辑是在你的应用中实现的,比如自动清理过期文章缓存、进行社区数据统计等。
  5. 执行反馈:任务执行完成后,执行器会将执行结果反馈给调度中心,调度中心将这些信息展示在Web界面上,包括任务的成功、失败状态,以及执行日志等。

技术社区项目应用场景

  • 自动清理过期文章缓存:可以编写一个任务,该任务遍历文章缓存,检查每篇文章的过期时间,如果文章已过期,则从缓存中清除。
  • 社区数据统计:可以编写一个任务,定期统计社区的用户活跃度、发帖数量等信息,为社区管理提供数据支持。

Spring Boot整合xxl-job

整合XXL-JOB到Spring Boot项目中,可以让应用支持分布式定时任务的管理和执行。这样做不仅能够提高任务执行的可靠性和灵活性,还能通过XXL-JOB提供的调度中心进行统一的任务监控和管理。下面是Spring Boot整合XXL-JOB的基本步骤:

步骤1:添加依赖

首先,在Spring Boot项目的pom.xml文件中添加XXL-JOB执行器的依赖:

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-spring-boot-starter</artifactId><version>最新版本号</version>
</dependency>

确保使用XXL-JOB的最新版本,以获得最新功能和最好的性能。

步骤2:配置执行器

在你的Spring Boot应用的配置文件(通常是application.propertiesapplication.yml)中,配置XXL-JOB执行器的相关属性。这包括执行器的名称、注册中心地址、执行器的IP和端口等:

xxl:job:admin:addresses: http://your-xxl-job-admin-address/xxl-job-adminexecutor:appname: springboot-xxl-jobip: port: 9999logpath: /data/applogs/xxl-job/jobhandlerlogretentiondays: 30

  • addresses是XXL-JOB调度中心的地址。
  • appname是执行器的名称,需要在XXL-JOB调度中心注册。
  • ipport是执行器的IP地址和端口号,如果留空,则会自动获取。
  • logpath是任务执行日志存放的路径。
  • logretentiondays是日志保留天数。

步骤3:定义任务执行器

在你的应用中定义任务执行逻辑。使用@XxlJob注解标记方法,方法名即为任务的标识。这个方法将被XXL-JOB调度中心调用来执行具体的任务逻辑:

import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;@Component
public class SampleXxlJob {@XxlJob("demoJobHandler")public void demoJobHandler() throws Exception {// 这里写任务执行逻辑System.out.println("XXL-JOB, Hello World.");}
}

步骤4:在XXL-JOB调度中心配置任务

登录XXL-JOB调度中心的Web界面,添加一个新的任务。在任务配置中,设置任务的CRON表达式、执行器(即步骤2中配置的appname),以及步骤3中定义的任务标识(demoJobHandler)。

步骤5:执行和监控任务

一旦任务被配置并启动,XXL-JOB调度中心就会根据CRON表达式定时触发任务。你可以在调度中心的Web界面上监控任务的执行情况,包括成功、失败次数,以及任务执行日志等。

项目实际场景应用

技术社区项目中,在Spring Boot应用中集成XXL-JOB执行器来实现“自动清理过期文章缓存”和“社区数据统计”的场景。

1. 集成XXL-JOB执行器

首先,确保你的Spring Boot项目中包含了XXL-JOB的执行器依赖。在pom.xml中添加:

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-executor-spring-boot-starter</artifactId><version>最新版本号</version>
</dependency>

接下来,配置执行器的基本信息。在application.propertiesapplication.yml中配置:

xxl:job:executor:appname: xxl-job-demo-executoraddress:ip:port: 9999logpath: /data/applogs/xxl-job/jobhandlerlogretentiondays: 30admin:addresses: http://localhost:8080/xxl-job-admin

2. 实现“自动清理过期文章缓存”任务

创建一个任务处理器类,使用@XxlJob注解定义一个任务处理器方法:

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;@Component
public class CacheTaskHandler {@XxlJob("cleanExpiredArticleCache")public void cleanExpiredArticleCache() {// 任务逻辑,示例代码XxlJobHelper.log("开始执行清理过期文章缓存任务");// 执行清理逻辑// 假设有一个方法cleanCache()负责实际的清理操作cleanCache();XxlJobHelper.log("过期文章缓存清理完成");}private void cleanCache() {// 实际的清理逻辑// 这里仅为示例,具体实现需要根据实际缓存机制来编写}
}

3. 实现“社区数据统计”任务

同样,创建一个任务处理器类,定义一个执行社区数据统计的任务处理器方法:

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;@Component
public class DataStatisticsTaskHandler {@XxlJob("communityDataStatistics")public void communityDataStatistics() {XxlJobHelper.log("开始执行社区数据统计任务");// 执行数据统计逻辑// 假设有一个方法statistics()负责实际的统计操作statistics();XxlJobHelper.log("社区数据统计完成");}private void statistics() {// 实际的统计逻辑// 这里仅为示例,具体实现需要根据你的业务需求来编写}
}

4. 在XXL-JOB调度中心配置任务

最后,你需要登录到XXL-JOB调度中心的Web界面,添加新任务,并配置任务的执行器、任务描述、CRON表达式等信息。对于上述两个任务,确保执行器选项与你在application.yml中配置的appname相匹配,并在JobHandler字段中分别填写cleanExpiredArticleCachecommunityDataStatistics

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

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

相关文章

Jmeter —— jmeter中元件的执行顺序作用域

元件的执行顺序&#xff1a; 配置元件-->前置处理程序-->定时器-->取样器-->后置处理程序&#xff08;除非Sampler 得 到的返回结果为空&#xff09;-->断言&#xff08;除非Sampler 得到的返回结果为空&#xff09;-->监听器 &#xff08;除非Sampler 得到…

【Redis系列】深入了解 Redis:一种高性能的内存数据库

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

微信小程序-day01

文章目录 前言微信小程序介绍 一、为什么要学习微信小程序?二、微信小程序的历史创建开发环境1.注册账号2.获取APPID 三、下载微信开发者工具1.创建微信小程序项目2.填写相关信息3.项目创建成功 四、小程序目录结构项目的主体组成结构 总结 前言 微信小程序介绍 微信小程序&…

新 树莓派4B 温湿度监测 基于debian12的树莓派OS

前言 本文旨在完成通过外接温湿度传感器至树莓派使得树莓派不断记录并存储温湿度数据 这个领域有很多文章&#xff0c;但是部分文章已经缺乏了时效性&#xff0c;在最新系统不适用&#xff0c;本文目前适用 硬件 硬件连接 温湿度传感器常选用DHT11和DHT22&#xff0c;淘宝…

HelpLook AI 升级!一键生成SEO设置关键要素

| 现代SEO营销为何选择与AI同行 众多企业面临SEO优化日趋复杂的挑战&#xff0c;投入的时间和资源不断攀升。然而&#xff0c;HelpLook利用AI技术&#xff0c;一键完成SEO关键词和描述的生成&#xff0c;无需额外付费或繁琐操作&#xff0c;轻松提升网站曝光和点击率&#xff…

Android 学习之追踪应用的安装情况

先上结论&#xff0c;急用的话直接看结论 结论一、借助 API 读取安装信息&#xff0c;然后上报二、借助手动埋点&#xff0c;然后上报三、对比 前提过程 结论 一、借助 API 读取安装信息&#xff0c;然后上报 通过 PackageManager 的 API&#xff0c;我们可以得知自身应用安装…

【SSM】任务列表案例 基本CRUD SSM整合

文章目录 一、案例功能预览二、接口分析三、前端工程导入四、后端程序实现和测试4.1 准备4.2 功能实现4.2.1 分页查询显示4.2.2 添加计划4.2.2 删除计划4.2.3 修改计划 4.3 前后联调 一、案例功能预览 Github 地址 &#xff1a; ssm-integration-part 二、接口分析 学习计划…

【话题】2024年AI辅助研发趋势,有那些应用领域

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读文章&#xff01; 此篇是【话题达人】系列文章&#xff0c;这一次的话题是《2024年AI辅助研发趋势》 目录 背景概念实践医药领域汽车设计领域展望未来文章推荐 背景 随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅…

BI数据分析案例详解:零售人货场分析该怎么做?

在当今快节奏、高竞争的商业环境中&#xff0c;人货场分析已成为企业成功的关键因素之一。科技的进步和数据的日益丰富使得企业对人流、货物流和场地布局的深入洞察变得愈发重要。通过科学的人货场分析&#xff0c;企业能更好地理解顾客行为、优化供应链、提高运营效率&#xf…

【wine】WINEDEBUG 分析mame模拟器不能加载roms下面的游戏 可以调整参数,快速启动其中一个游戏kof98

故障现象&#xff0c;MAME启动后&#xff0c;游戏都没有识别 添加日志输出&#xff0c;重新启动wine #!/bin/bashexport WINEPREFIX$(pwd)/.wine export WINESERVER$(pwd)/bin/wineserver export WINELOADER$(pwd)/bin/wine export WINEDEBUG"file,mame,warn,err"…

加速渲染:Blender与在线渲染农场的结合

​在数字艺术和三维设计的世界里&#xff0c;Blender软件因其强大的功能和灵活性而广受欢迎。然而&#xff0c;随着项目复杂性的增加&#xff0c;渲染时间也随之增长&#xff0c;成为艺术家和设计师面临的一大挑战。在线渲染农场的出现&#xff0c;为这一问题提供了革命性的解决…

C语言例:(m=a==b)||(n=a==b);求解m,n的值

题目&#xff1a;设int a0,b0,m0,n0;执行语句(mab)||(nab);求解m,n的值。 #include<stdio.h> int main(void) {int a0,b0,m0,n0;(mab)||(nab);printf("m%d\n",m);printf("n%d\n",n);return 0; } 优先级: () 优先 优先 a b -->为真&am…

【软件测试面试】银行项目测试面试题+答案(二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面试题&#xff1…

代码随想录算法训练营第二十三天 | 77. 组合

回溯 77. 组合 题目链接&#xff1a;https://leetcode.cn/problems/combinations/ 文章讲解&#xff1a;https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ti4y1L7cv/ class Solution { private:vector<…

打卡学习kubernetes——了解五种控制器类型

目录 1 Deployment控制器 2 StatefulSet控制器 3 DaemonSet控制器 4 Job控制器 5 CronJob控制器 1 Deployment控制器 Deployment为Pod和Replica Set&#xff08;下一代Replication Controller&#xff09;提供声明式更新。 Deployment运行无状态应用&#xff0c;一般情况…

圈子社交系统-多人语音-交友-陪玩-活动报名-商城-二手论坛-源码交付,支持二开!

圈子小程序适用于多种场景&#xff0c;涵盖了各个领域的社交需求。以下是一些常见的适用场景&#xff1a; 兴趣社区&#xff1a; 用户可以加入自己感兴趣的圈子&#xff0c;与志同道合的人一起讨论交流&#xff0c;分享经验和知识。 行业交流&#xff1a; 各个行业可以建立自…

突发想法2:浏览器的缓存有什么作用?为什么有了缓存,一开始较快,缓存多了打开某些网站会变慢?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、问题二、解决1、为什么第一次打开时那么慢&#xff…

python练习一

1. 五个PPT上的界面打印【print、input函数】 print("\t\t\t\t\t英雄联盟商城登录界面\n~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~\n\t\t\t\t\t1. 用户登录\n\t\t\t\t\t2. 新用户注册\n\t\t\t\t\t3. 退出系统\n" "~ * ~ * ~ * ~ * ~ * ~ * ~…

由世界第一个AI软件工程师Devin引发的热潮背后----程序员到底会不会被代替?AI发展至如今是否初衷已变?

目录 一.Devin的登场是突破也是导火索 二.Devin的"逆天"能力 1、端到端构建和部署程序 2、自主查找并修复bug 3、训练和微调自己的AI模型 4、修复开源库 5、成熟的生产库也能做贡献 6、学习能力 三.Devin的出现甚至整个AI领域的进步,编程还有未来吗? 1.业…

接上一篇:分布式调用链追踪系统设计

所以必须得记录父子关系&#xff1a; A---->B 是 B---->C 的父调用 A---->D 是 D---->E 的父调用 A---->D 还是 D---->F 的父调用 如何记录呢&#xff1f;需要给每个调用分配一个ID (称为 SpanID)&#xff0c;并且把这个 ID 传递给子调用&#xff0c; 子…