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

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 的依赖:

xml 复制代码
<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
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
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
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
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
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 可以帮助我们将一个复杂的任务分割成多个小任务,并在多个执行器上并行执行,从而提高任务处理的效率和速度。

文末感谢各位一键三连。

相关推荐
爱吃泡芙的小白白1 小时前
爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
redis·分布式·爬虫·http代理·学习记录
IT小辉同学4 小时前
Docker如何更换镜像源提高拉取速度
spring cloud·docker·eureka
躺不平的理查德7 小时前
General Spark Operations(Spark 基础操作)
大数据·分布式·spark
talle20217 小时前
Zeppelin在spark环境导出dataframe
大数据·分布式·spark
渣渣盟8 小时前
大数据开发环境的安装,配置(Hadoop)
大数据·hadoop·分布式
Angindem8 小时前
SpringClound 微服务分布式Nacos学习笔记
分布式·学习·微服务
能来帮帮蒟蒻吗11 小时前
Docker安装(Ubuntu22版)
笔记·学习·spring cloud·docker·容器
龙仔72517 小时前
离线安装rabbitmq全流程
分布式·rabbitmq·ruby
细心的莽夫17 小时前
SpringCloud 微服务复习笔记
java·spring boot·笔记·后端·spring·spring cloud·微服务