xxl-job的分片机制

分片概念:任务的分布式执行,需要将一个任务拆分为多个独立的任务项,然后由分布式的服务器分别执行某一个或几个分片项。

注意:
分片参数是调度中心自动传递的,不用我们手动传递,且集群中的每个index序号是固定的,即使集群中有项目宕机,也不影响其他项目的index序号,当重启宕机项目时,它的序号还是原先的。

分片方案1:

获取总分片数和当前分片代码:
//获取分片 根据配置的机器数量和获得的分片拿去对应的数据
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
//执行器数量
int number = shardingVO.getTotal();
//当前分片`在这里插入代码片`
int index = shardingVO.getIndex();
sql每次从表中取100条数据:
SELECT id,name,password
FROM t_push
WHERE `status` = 0
AND mod(id,#{number}) = #{index}  //number 分片总数,index当前分片数 mod函数取余
order by id desc
LIMIT 100;

方案2

//分片参数ShardingVO shardingVO = ShardingUtil.getShardingVo();WearUserQuery wearUserQuery = new WearUserQuery();
wearUserQuery.createCriteria().andFirstCommunicationTimeIsNotNull();
List<WearUser> wearUsers = wearUserService.selectWearUserByQuery(wearUserQuery);
int i = wearUsers.size();for (int j = 0; j < i; j++) {
    //对数据下标以当前分片取模选取处理
    if (j % shardingVO.getTotal() == shardingVO.getIndex()) {
        //do something
    }}

原理
利用分片任务的分配总数和当前分片数巧妙实现了该功能,主要是表的id是自增的,用该id的值对总分片数进行求余,求余后的数正好等于应用的当前分片数,巧妙的实现了该分布式任务,记录一下。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值