一、分布式调度参数传递和调度日志配置
简单获取参数
        String jobParam = XxlJobHelper.getJobParam();
        log.info("dbc方法调用成功——"+ jobParam);  日志打印操作
    XxlJobHelper.log("这个是执行日志:param="+jobParam);  执行结果修改
设置任务结果为失败
XxlJobHelper.handleFail("任务执行失败!");  设置任务结果为成功
        XxlJobHelper.handleSuccess("任务执行成功!");  二、【高级】XXL-Job集群部署和高可用案例配置
简单画了个高可用集群部署[aru_36]
上代码
#调度中心部署地址,多个配置逗号分隔 "http://address01,http://address02" xxl.job.admin.addresses=http://127.0.0.1:8081/xxl-job-admin,http://127.0.0.1:8082/xxl-job-admin
三、【高级】XXL-Job海量数据处理-分片任务实战
- 需求 
- 有一个任务需要处理100W条数据,每条数据的业务逻辑处理要0.1s
 - 对于普通任务来说,只有一个线程来处理 可能需要10万秒才能处理完,业务则严重受影响
 - 案例:双十一大促,给1000万用户发营销短信
 
 - 什么是分片任务 
- 执行器集群部署,如果任务的路由策略选择【分片广播】,一次任务调度将会【广播触发】对应集群中所有执行器执行一次任务,同时系统自动传递分片参数,执行器可根据分片参数开发分片任务
 - 需要处理的海量数据,以执行器为划分,每个执行器分配一定的任务数,并行执行
 - XXL-Job支持动态扩容执行器集群,从而动态增加分片数量,到达更快处理任务
 - 分片的值是调度中心分配的
 
 
- 解决思路 
- 如果将100W数据均匀分给集群里的10台机器同时处理,
 - 每台机器耗时,1万秒即可,耗时会大大缩短,也能充分利用集群资源
 - 在xxl-job里,可以配置执行器集群有10个机器,那么分片总数是10,分片序号0~9 分别对应那10台机器。
 - 分片方式 
- id % 分片总数 余数是0 的,在第1个执行器上执行
 - id % 分片总数 余数是1 的,在第2个执行器上执行
 - id % 分片总数 余数是2 的,在第3个执行器上执行
 - ...
 - id % 分片总数 余数是9 的,在第10个执行器上执行
 
 
 
代码实战
    @XxlJob(value = "shardingJobHandler")
    public void shardingJobHandler(){
        // 当前的执行器编号
        int shardIndex = XxlJobHelper.getShardIndex();
        // 总的分片数,就是执行器的集群数量
        int shardTotal = XxlJobHelper.getShardTotal();
        log.info("分片总数:{},当前分片数{}",shardTotal,shardIndex);
        List<Integer> allUserIds = getAllUserIds();
        allUserIds.forEach(obj->{
            if (obj % shardTotal == shardIndex){
                log.info("第{}片,命中分片开始处理用户id={}",shardIndex,obj);
            }
        });
    }
    private List<Integer> getAllUserIds(){
        List<Integer> ids = new ArrayList<>();
        for (int i=0;i<100;i++){
            ids.add(i);
        }
        return ids;
    }
  本文作者为DBC,转载请注明。







