分片任务

分片任务能更好的利用集群的能力,可以同时调度多个机器并行运行任务。

image

分片任务的实现原理包括以下几个核心步骤:

1、任务分配
当一个分片任务被触发时,调度器会根据任务的分片参数决定需要多少个执行器参与任务。
每个执行器或执行线程会接收到一个分片索引(shard index)和分片总数(shard total)。
2、分片参数:
分片索引(从0开始)标识了当前执行器处理的是哪一部分数据。
分片总数告诉执行器总共有多少个分片。
3、并行执行:
每个执行器根据分配到的分片索引并行执行其任务。例如,如果一个任务被分为10个片,那么每个执行器可能负责处理10%的数据。
4、处理逻辑:
开发者在任务实现时需要根据分片索引和分片总数来调整处理逻辑,确保每个分片处理正确的数据段。
5、结果汇总:
分片执行完毕后,各个执行器的执行结果可以被独立处理,或者可以通过某种机制进行结果的汇总和整合。

 

public void myxecute() {
   
    int shardIndex = XxlJobHelper.getShardIndex();
    int shardTotal = XxlJobHelper.getShardTotal();

    // todo 获取业务id ,查询数据库或者 参数重获取
    if (id % shardTotal == shardIndex) 
        // 执行任务
        System.out.println("执行任务:  " + id);
    } else {
        // 不执行任务
        System.out.println(id + " 不执行任务");
    }
}

 

源码分享-关于分片参数的设置和获取

xxl-job-admin 服务

com.xxl.job.admin.core.trigger.XxlJobTrigger#trigger

将所有执行器发起调度

image

 

设置分片参数

image

 

image

通过自研调度RPC 调用执行器的接口

com.xxl.job.core.biz.impl.ExecutorBizImpl#run

image

image

 

JobThread
// 使用 triggerQueue 任务消费
private LinkedBlockingQueue<TriggerParam> triggerQueue;

这个线程JobThread run 不断从triggerQueue 中 poll 参数,构建 XXLjobContext

image

至此 关于分片参数传递 已经完全明了。

image

 

 posted on 2025-09-18 16:00  会写点代码的黄二  阅读(20)  评论(0)    收藏  举报