xxl-job分布式任务调度平台

embedded/2025/1/15 7:46:13/

XXL-JOB是一个分布式任务调度平台,由国人谢旺(Xie Wang)开发。它主要解决了在分布式系统中关于任务调度、定时执行、任务分片、失败重试、任务依赖等方面的问题。XXL-JOB提供了一个简单、易用、功能强大的解决方案,适用于需要定时执行任务的业务场景。

XXL-JOB的主要特点包括:

  1. 易于使用:XXL-JOB提供了简洁的API和Web界面,使得任务的创建、管理和监控变得非常容易。

  2. 分布式架构:支持多机分布式部署,可以水平扩展,提高调度系统的可用性和负载能力。

  3. 执行器隔离:提供了多种执行器类型,包括BEAN模式、GLUE模式等,以适应不同的任务执行需求。

  4. 任务分片:支持任务分片处理,可以将一个大任务分割成多个小任务并行执行,提高任务处理效率。

  5. 失败重试:支持任务失败后的重试机制,可以根据不同的策略进行重试。

  6. 阻塞处理:提供了阻塞处理策略,当执行器资源不足时,可以采取不同的策略来处理新任务。

  7. 任务依赖:支持任务之间的依赖关系,可以设置任务的上游和下游,实现复杂的任务流。

  8. 可视化界面:提供了一个Web管理界面,可以方便地进行任务的增删改查和调度监控。

  9. 弹性扩缩:支持在线动态添加或移除执行器节点,无需停止服务。

XXL-JOB适用于需要定时任务调度的各种场景,如定时数据同步、定时数据备份、定时报告生成、定时任务触发等。它可以帮助开发者从繁琐的任务调度管理中解放出来,专注于业务逻辑的开发。

定时任务调度案例

XXL-JOB 的代码实现涉及到几个不同的部分,包括调度中心、执行器以及任务的配置。下面我将提供一个简单的示例,展示如何使用 XXL-JOB 实现一个定时任务调度场景。

要使用 XXL-JOB 实现一个定时任务调度场景,你需要设置调度中心和执行器。下面这个示例使用 XXL-JOB 创建一个定时任务,开整。

步骤 1:添加 XXL-JOB 依赖

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

<dependencies><!-- XXL-JOB --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.0</version></dependency>
</dependencies>

步骤 2:创建执行器项目

创建一个 Spring Boot 项目作为执行器。

XxlJobExecutorApplication.java
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class XxlJobExecutorApplication {public static void main(String[] args) {// 启动执行器XxlJobSpringExecutor.scheduleJob();SpringApplication.run(XxlJobExecutorApplication.class, args);}
}
application.properties
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=
xxl.job.executor.port=9999
xxl.job.accessToken=
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30

步骤 3:创建任务处理器

创建一个任务处理器类,用于执行具体的任务逻辑。

TestJobHandler.java
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;@Component
public class TestJobHandler {@XxlJob("testJobHandler")public void testJob() {System.out.println("执行测试任务");// 任务逻辑}
}

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

调度中心通常是一个独立的项目,你可以从 XXL-JOB 的官方 GitHub 仓库下载源码并运行。

步骤 5:在 XXL-JOB 管理平台添加任务

  1. 启动调度中心和执行器。
  2. 访问 XXL-JOB 管理平台(默认地址:http://127.0.0.1:8080/xxl-job-admin)。
  3. 登录平台(默认用户名和密码都是 admin)。
  4. 创建新任务,填写任务描述,选择执行器(步骤 2 中配置的 appname),设置 Cron 表达式(例如 0/5 * * * * ? 表示每 5 秒执行一次)。
  5. 执行器选择 下拉菜单中选择你配置的执行器。
  6. 保存任务。

步骤 6:测试任务

在 XXL-JOB 管理平台,启动创建的任务,观察任务日志,确保任务按照预期执行。

任务分片业务场景案例

任务分片(Sharding)是分布式任务调度中的一种常见需求,它允许将一个大任务分割成多个小任务,分散到不同的执行器上并行执行。XXL-JOB 支持任务分片,可以通过分片参数来实现。

以下是一个使用 XXL-JOB 实现任务分片的业务场景案例:

步骤 1:定义分片参数

在 XXL-JOB 的管理界面中,创建任务时可以设置分片参数。例如,可以将分片参数设置为 0=1,1=2,2=3,这意味着任务将被分成3个分片,每个分片负责一部分数据。

步骤 2:创建分片任务处理器

在执行器项目中,创建一个任务处理器类,用于处理分片任务。

ShardingJobHandler.java
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.context.XxlJobHelper;public class ShardingJobHandler {@XxlJob("shardingJobHandler")public void shardingJobHandler() throws Exception {// 获取分片参数String shardingParam = XxlJobHelper.getJobParam();String[] shards = shardingParam.split(",");if (shards.length != 3) {throw new IllegalArgumentException("分片参数不正确");}// 获取当前分片项int shardIndex = XxlJobHelper.getShardIndex();int shardTotal = XxlJobHelper.getShardTotal();System.out.println("分片参数:" + shardingParam);System.out.println("当前分片项:" + shardIndex + ", 总分片数:" + shardTotal);// 执行分片任务逻辑for (int i = 0; i < shards.length; i++) {if (i == shardIndex) {// 模拟业务逻辑System.out.println("分片 " + i + " 执行业务逻辑");// 假设这里是业务逻辑代码Thread.sleep(1000); // 模拟耗时任务}}}
}

步骤 3:配置 XXL-JOB 执行器

确保执行器已经正确配置,并且能够连接到 XXL-JOB 的调度中心。

application.properties
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=
xxl.job.executor.port=9999
xxl.job.accessToken=
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30

步骤 4:在 XXL-JOB 管理平台配置任务

  1. 登录 XXL-JOB 管理平台。
  2. 创建新任务,选择执行器和分片参数。
  3. 在“JobHandler”字段中输入 shardingJobHandler
  4. 设置“分片参数”为 0=1,1=2,2=3
  5. 保存并启动任务。

步骤 5:测试任务

在 XXL-JOB 管理平台启动任务,观察任务日志,确保每个分片按预期执行。

小结一下

  • 分片参数:在任务创建时设置,格式为 分片项=分片数,用逗号分隔不同的分片项。
  • 任务处理器:在任务处理器中,通过 XxlJobHelper 获取分片参数和当前分片索引,然后执行相应的业务逻辑。
  • 执行器配置:确保执行器能够连接到调度中心,并且任务处理器类已经被 Spring 管理。

XXL-JOB 可以帮助我们将一个复杂的任务分割成多个小任务,并在多个执行器上并行执行,从而提高任务处理的效率和速度。

文末感谢各位一键三连。


http://www.ppmy.cn/embedded/107635.html

相关文章

Qt/QML学习-Calendar

QML学习 Calendar例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Controls 2.15Window {width: 640height: 480visible: truetitle: qsTr("Calendar"…

景联文科技:提供高质量多模态数据标注,推动智能化转型

随着人工智能技术的快速发展&#xff0c;多模态数据标注成为推动智能系统更深层次理解和应用的关键技术之一。 作为行业领先的多模态数据标注服务商&#xff0c;景联文科技凭借其在技术、流程和人才方面的综合优势&#xff0c;推出了全面的多模态标注解决方案&#xff0c;助力…

pytest运行方式及前置后置封装详解

一、Pytest 优点认知 1.可以结合所有的自动化测试工具 2.跳过失败用例以及失败重跑 3.结合allure生产美观报告 4.和Jenkins持续集成 5.很多强大的插件 pytest-html&#xff1a;生产html测试报告 pytest-xdist&#xff1a;多线程运行 pytest-ordering&#xff1a;改变用例执行…

力扣172.阶乘后的0

class Solution {public int trailingZeroes(int n) {int ans 0;//本质&#xff1a;每5个数有一个5的倍数&#xff0c;每25个数有一个25的倍数……int num 5;while(n / num ! 0) {ans n/num;num * 5;}return ans;} }

修改服务器DNS解析及修改自动对时时区

修改服务器DNS解析&#xff1a; 1、搜索一下当地的DNS服务器的地址 2、登录服务器&#xff0c;执行 vim /etc/resolv.conf文件&#xff0c;在nameserver字段后填写DNS服务的地址 3、chattr i /etc/resolv.conf 加上不可修改权限&#xff0c;防止重启DNS被修改 修改自动对时…

day16JS-es6生成器函数、模块开发

1. 生成器函数声明语法 声明关键字&#xff1a;function* 声明语法&#xff1a; function *函数名&#xff08;&#xff09;{ } 生成器函数可以退出&#xff0c;并在稍后重新进入&#xff0c;其上下文&#xff08;变量绑定&#xff09;会在重新进入时保存。 案例&#xff1a; …

原型与原型链

在JavaScript中&#xff0c;原型&#xff08;prototype&#xff09;和原型链&#xff08;prototype chain&#xff09;是理解对象如何继承属性和方法的关键概念。 原型 每一个对象&#xff08;函数也是对象&#xff09;都有一个特殊的属性叫做原型&#xff08;prototype&…

数学建模强化宝典(13)M-K检验法

前言 M-K检验法&#xff0c;全称为Mann-Kendall检验法&#xff0c;是一种非参数的假设检验方法&#xff0c;广泛应用于时间序列数据的趋势性变化检验&#xff0c;特别是气候序列中的趋势分析和突变点检测。以下是对M-K检验法的详细介绍&#xff1a; 一、定义与背景 M-K检验法由…