超越任务调度的极致:初探分布式定时任务 XXL-JOB 分片广播

XXL-JOB 是一个分布式任务调度平台,支持分片任务执行。

1. 依赖引入

在项目中引入 XXL-JOB 的相关依赖。通常,你需要在项目的 pom.xml 文件中添加如下依赖:

XML 复制代码
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

2. 任务类编写

编写需要调度的任务类,并使用 @XxlJob 注解标记需要执行的方法。

在需要分片的方法上使用 @XxlJob 注解,并添加 @XxlJob(value = "yourJobHandler", distributedJob = true) 注解配置分片任务。

java 复制代码
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;

public class MyJobHandler {

    @XxlJob(value = "yourJobHandler", distributedJob = true)
    public void execute() {
        // 获取分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        // 根据分片参数执行相应的逻辑
        // ...

        // 任务执行完成后,如果有分片任务,需调用该方法告知调度中心当前分片任务已完成
        XxlJobHelper.handleShardResult("分片任务执行完成");
    }
}

3. JobHandler注册

在Spring Boot 项目中,需要注册 JobHandler 到 Spring 容器。可以使用 @Component 或者配置文件来完成注册。

java 复制代码
import com.xxl.job.core.executor.XxlJobExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class XxlJobConfig {

    @Bean
    public XxlJobExecutor xxlJobExecutor() {
        XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
        xxlJobExecutor.setAdminAddresses("http://your-admin-address");
        xxlJobExecutor.setAppName("your-app-name");
        xxlJobExecutor.setIp("your-ip");
        xxlJobExecutor.setPort(9999);
        xxlJobExecutor.setAccessToken("your-access-token");
        xxlJobExecutor.setLogPath("your-log-path");
        xxlJobExecutor.setLogRetentionDays(7);

        return xxlJobExecutor;
    }
}

4. 配置管理中心

在 XXL-JOB 的管理中心(Admin)中配置任务,确保分片任务的设置正确(具体配置可以参考 XXL-JOB 官方文档)。

5. 任务执行流程

当任务触发时,调度中心将任务发送给执行器。

执行器根据配置的任务处理器(JobHandler)找到对应的任务方法。

如果该任务方法使用了 @XxlJob 注解,并配置了 distributedJob = true,则启用分片任务。

分片任务在执行前,执行器会根据配置的 shardTotal 数量创建对应的子任务。

每个子任务执行时,可以通过 XxlJobHelper.getShardIndex() 和 XxlJobHelper.getShardTotal() 获取当前分片任务的索引和总数。

子任务执行完成后,需要调用 XxlJobHelper.handleShardResult("分片任务执行完成") 来告知调度中心当前分片任务已完成。

相关推荐
上海锟联科技3 小时前
DAS一体化光模块
分布式·分布式光纤传感·ofdr·光频域反射·das
Java 码农4 小时前
RabbitMQ集群部署方案及配置指南04
分布式·rabbitmq
独自破碎E4 小时前
在RabbitMQ中,怎么确保消息不会丢失?
分布式·rabbitmq
Java 码农4 小时前
RabbitMQ集群部署方案及配置指南02
分布式·rabbitmq
虫小宝4 小时前
京东返利app分布式追踪系统:基于SkyWalking的全链路问题定位
分布式·skywalking
星图易码4 小时前
星图云开发者平台功能详解 | IoT物联网平台:工业设备全链路智能管控中枢
分布式·物联网·低代码·低代码平台
王五周八4 小时前
基于 Redis+Redisson 实现分布式高可用编码生成器
数据库·redis·分布式
成为你的宁宁5 小时前
【Zabbix 分布式监控实战指南(附图文教程):Server/Proxy/Agent 三者关系解析 + Proxy 部署、Agent 接入及取数路径验证】
分布式·zabbix
无心水5 小时前
【分布式利器:腾讯TSF】6、TSF可观测性体系建设实战:Java全链路Metrics+Tracing+Logging落地
java·分布式·架构·wpf·分布式利器·腾讯tsf·分布式利器:腾讯tsf
予枫的编程笔记5 小时前
Elasticsearch聚合分析与大规模数据处理:解锁超越搜索的进阶能力
java·大数据·人工智能·分布式·后端·elasticsearch·全文检索