分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务
实现思路
在微服务中实现XXL-JOB中的任务的执行器,根据分片参数中的当前分片总数和当前执行器的分片索引从数据库表中进行分段切分扫描处理,有两种方法分段切分:
分页查询:先统计记录总个数,总个数除以分片数量就是页大小,根据页大小和分片索引进行分页查询。
根据ID取模运算:查询时添加条件 mod( id, 总分片数 ) = 当前分片索引
注意事项
执行器集群
执行器回调地址(xxl.job.admin.addresses)需要保持一致
同一个执行器集群内AppName(xxl.job.executor.appname)需要保持一致
代码实现
@XxlJob("testHandler")
public ReturnT
// 获取分片总数和当前分片索引
ShardingUtil.ShardingVO shardingVo = ShardingUtil.getShardingVo();
int numbers = shardingVo.getTotal(); // 分片总数
int index = shardingVo.getIndex(); // 当前分片索引
XxlJobLogger.log( "分片参数 当前分片索引"+index+" 总分片数"+numbers);
// 查询数据,分批处理
// 1.查询数据
QueryWrapper
qw.lambda()
.apply("mod(id,"+numbers+" ) = "+index); //对id取模
List
// 2.处理
demoList.forEach( demo->{
// 处理业务逻辑
});
return ReturnT.SUCCESS;
}
参考阅读
发表评论