当前位置: 首页 > news >正文

分布式任务调度框架XXl-job

在之前写过一篇关于任务调度框架Spring Task的文章,此篇则是被广泛使用的分布式任务调度框架xxl-job。在面对分布式部署、复杂任务调度需求以及需要强大管理和监控能力的场景下,XXL-JOB相较于Spring Task提供了更加全面和专业的解决方案。

目录

xxl-job简介

xxl-job的特点

xxl-job架构图分析

xxl-job的应用实例

xxl-job入门

应用细节

阻塞处理策略

Cron表达式


xxl-job简介

XXL-JOB 是一个分布式任务调度平台,由美团点评的中间件研发工程师许雪里开发。它旨在提供一个易于使用、轻量级且易于扩展的任务调度解决方案。XXL-JOB 的核心设计理念包括快速开发、简单学习曲线以及高度的可扩展性。该平台适用于需要执行定时任务的各种场景,并支持多种任务执行方式和调度策略。

xxl-job的特点

下面是以表格形式呈现的几种常见的任务调度框架对比,包括它们的特点、优势和适用场景:

特性/框架JDK TimerSpring TaskQuartzElastic JobXXL-JOB
开发语言JavaJava (Spring)JavaJavaJava
执行频率设定固定频率时间和频率时间和频率(CronTrigger, SimpleTrigger)时间和频率时间和频率
分布式支持不支持不支持不直接支持支持支持
管理界面基本支持强大控制台,易于管理和监控
扩展性
学习曲线简单简单中等中等到高简单
应用场景单机应用中的简单定时任务单机或微服务架构下的定时任务复杂定时任务,需要高度定制化分布式环境下的定时任务分布式环境下的定时任务,强调易用性和管理
社区活跃度
典型用户小型项目或个人开发者微服务架构的应用各种规模的企业级应用分布式系统需求较高的企业已有多家公司接入,如大众点评、京东等
部署难度简单简单至中等中等中等到高简单

对于简单的定时任务,JDK Timer 或 Spring Task 可能就足够了;而对于需要高度可扩展性和分布式支持的任务调度,Quartz、Elastic Job 或 XXL-JOB 可能是更好的选择。特别是 XXL-JOB,由于其强大的管理界面和相对较低的学习曲线,在实际应用中得到了广泛的认可。

xxl-job架构图分析

我们将从以下问题解读此图:

1. XXL-JOB 分为哪几个部分?

主要分为两个部分调度中心和执行器。

调度中心:
数据中心:管理任务、执行器等信息。
调度器 (timewheel):负责定时触发任务的调度。
日志服务:提供实时滚动日志和历史日志查询。
回调服务:处理任务执行后的回调逻辑。
注册服务:用于执行器的注册和心跳检测。

执行器:
执行器服务:接收调度请求并执行任务。
JobHandler:具体的任务处理逻辑。
任务线程:负责执行具体任务。
调度结果队列:存储任务执行的结果。
自研RPC (xxl-rpc):用于调度中心与执行器之间的通信。

2. 在调度中心如何监控任务的执行过程?

调度中心通过以下方式监控任务的执行过程:

任务状态更新:调度中心会定期检查任务的状态,包括待执行、执行中、执行成功或失败等状态。
日志服务:调度中心提供了实时滚动日志和历史日志查询功能,可以通过这些日志查看任务的具体执行情况。
回调服务:任务执行完成后,执行器会将执行结果回调给调度中心,调度中心据此更新任务状态。

3. 调度中心如何知道执行器的IP和端口?

调度中心通过以下方式获取执行器的IP和端口:

执行器注册:执行器启动后会主动向调度中心注册,注册时会携带自身的IP和端口信息。
心跳机制:执行器会定期向调度中心发送心跳包,以确认其在线状态。心跳包中包含执行器的IP和端口信息。
配置文件:在执行器的配置文件中可以指定调度中心的地址,而调度中心则通过注册信息维护执行器的列表。

4. 在执行器中有哪几个队列?为什么会有队列?

执行器中的队列主要包括:

调度请求队列:用于存储待执行的任务请求。
调度结果队列:用于存储任务执行后的结果。

队列的作用主要有:

异步处理:通过队列实现任务的异步处理,提高系统的并发处理能力。
解耦:调度中心和执行器之间通过队列进行解耦,使得两者可以独立运行,提高系统的灵活性和稳定性。
容错性:队列可以缓冲任务请求,即使在短时间内有大量的任务请求,也可以通过队列平滑地处理,避免系统过载。

xxl-job的应用实例

xxl-job入门

假设你已经成功部署使用了xxl-job,访问网址打开界面如下:(这个只需要在GitGub上下载源码,从XXL-JOB的源码中找到并执行/doc/db/tables_xxl_job.sql脚本来初始化数据库表结构,编辑调度中心模块下的application.properties文件,修改数据库连接信息、端口号等必要配置项,然后运行项目即可)

在项目中定义一个测试类

    @XxlJob(value = "hello-world")
    public ReturnT<String> execute(String param) {
        for (int i = 1; i < 50; i++) {
            System.out.println("---------test xxl-job success-----------");
        }
        ReturnT.SUCCESS.setMsg("计划任务:测试xxl-job成功了");
        return ReturnT.SUCCESS;

    }

在任务调度中心界面是任务管理中新增一个任务

直接执行一次,在调度日志中查看日志

在idea中查看打印语句

经验证,xxl-job应用成功。

应用细节

阻塞处理策略

(调度过于密集执行器来不及处理时的处理策略)
单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;(
一般不推荐使用

Cron表达式

一个标准的Cron表达式由6个或7个字段组成,每个字段代表不同的时间单位,具体如下:

  1. 秒(可选):0-59
  2. 分钟:0-59
  3. 小时:0-23
  4. 日期(日):1-31
  5. 月份:1-12 或 JAN-DEC
  6. 星期:0-7 或 SUN-SAT (0和7都代表周日)
  7. 年份(可选):四位数字,表示年份

每个字段都可以指定具体的数值、范围、通配符等,下面是一些常见的符号及其含义:

  • *(星号):表示该字段的所有可能值。
  • ,(逗号):用于列出多个离散的值,例如在“月份”字段中使用1,6,12表示每年的1月、6月和12月执行。
  • -(短横线):指定一个值的范围,比如在“日期”字段中使用1-5表示每月的第1天到第5天。
  • /(斜杠):指定增量值,例如在“分钟”字段中使用3/15表示从第3分钟开始每隔15分钟执行一次。
  • ?(问号):仅用于“日期”和“星期”字段,表示不指定特定值,通常当您希望为其中一个字段设置确切的值而不关心另一个时使用。
  • L:仅用于“日期”和“星期”字段,分别表示月份中的最后一天和月份中的最后一个星期几。
  • W:仅用于“日期”字段,表示最接近指定日期的工作日(周一至周五)。
  • #:仅用于“星期”字段,用来确定某个月的第几个星期几,例如6#3表示某个月的第三个星期五(6代表星期五)。

示例

  • 0 0/5 * * * ?:每5分钟执行一次。
  • 0 0 12 * * ?:每天中午12点执行。
  • 0 15 10 ? * MON-FRI:周一至周五上午10:15执行。
  • 0 0 22 ? * 6L:每个月的最后一个星期五晚上10点执行。
  • 0 0/30 8-10 * * ?:每天早上8点到10点之间,每半小时执行一次。

如果你觉得依旧不够容易记忆,那么你可以直接将需求给Al,让它生成即可。

xxl-job总结

    XXL-JOB作为一个开源的分布式任务调度平台,自推出以来,在企业级应用中获得了广泛的认可和使用。以下是关于XXL-JOB在企业中的应用频率、地位以及对其未来的展望:

    企业应用频率与地位

    • 广泛应用:由于其轻量级设计、易于部署和使用的特性,加上丰富的功能和良好的扩展性,XXL-JOB已被众多企业采用,包括但不限于大众点评、京东、优信二手车、北京尚德、360金融(360)、联想集团(联想)、易信(网易)等知名企业。这表明它在处理复杂业务逻辑和大规模数据处理方面具有很高的实用价值。
    • 核心地位:对于需要高效、可靠的任务调度解决方案的企业来说,XXL-JOB往往扮演着关键角色。它不仅简化了任务调度的管理,还提高了系统的稳定性和效率,帮助企业更好地应对业务增长带来的挑战。

    对未来的畅想

    • 持续优化:随着技术的发展和用户需求的变化,预计XXL-JOB将继续进行迭代升级,优化现有功能并引入新的特性以满足更广泛的业务场景需求。
    • 增强分布式能力:未来版本可能会进一步加强其分布式处理能力,例如通过改进集群管理和任务分配算法来提高资源利用率和任务执行效率。
    • 提升智能化水平:借助人工智能和机器学习技术,XXL-JOB有望实现更加智能的任务调度策略,比如根据历史数据预测最佳执行时间或自动调整资源配置。
    • 社区和生态建设:加强社区建设和推广,吸引更多的开发者参与贡献代码,扩大生态系统,提供更多的插件和集成方案,使XXL-JOB成为任务调度领域的首选平台之一。
    • 云原生支持:随着云计算技术的普及,XXL-JOB可能也会加大对云原生的支持力度,Kubernetes集成等,以便更好地服务于云端部署的需求。

    相关文章:

  • 蓝桥杯备考:二分答案之路标设置
  • 大模型-提示词工程与架构
  • RK3588开发笔记-RTL8852wifi6模块驱动编译报错解决
  • Linux操作系统7- 线程同步与互斥4(基于POSIX条件变量的生产者消费者模型)
  • moveit2基础教程上手-使用xarm6演示
  • 【工具变量】中国各地级市是否属于“信息惠民国家试点城市”匹配数据(2010-2024年)
  • 『 C++ 』错误使用std::mutex引发的error C2039: “try_lock_until“: 不是 “std::mutex“ 的成员
  • vue3:十一、主页面布局(左侧菜单折叠展开设置)
  • vulnhub靶场之【hack-me-please靶机】
  • 微前端框架深度对比与技术实现剖析
  • Cursor的五种高级用法
  • 数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记
  • 权限维持—Linux系统Rootkit后门
  • 云原生之开源遥测框架OpenTelemetry(在 Gin 框架中使用 OpenTelemetry 进行分布式追踪和监控)
  • 软考通关利器:中级软件设计师结构化开发核心考点
  • UniRel论文复现过程中的问题解决办法(全)
  • 【C语言】字符串函数详解
  • AtCoder Beginner Contest 398(ABCDEF)
  • MySQL密码修改的全部方式一篇详解
  • 使用brower use AI 代理自动控制浏览器完成任务
  • 南部战区位南海海域进行例行巡航
  • 辽宁省全力开展辽阳一饭店火灾事故救援处置工作
  • 河北:开展领导干部任性用权等形式主义官僚主义问题专项整治
  • 四川省社科联期刊:不建议在读硕士、博士将导师挂名为第一作者
  • 美情报机构攻击中国大型商用密码产品提供商,调查报告公布
  • 南阳市委原书记朱是西被“双开”:搞劳民伤财的“政绩工程”