xxl-job如何实现分片处理

一、简介

  xxl-job是一款开源、分布式任务调度平台。它基于Java语言开发,提供Web界面和API接口,支持多种任务调度方式,如Cron、API、固定速率等,并具备任务依赖、任务分片、任务路由等高级功能。xxl-job还提供任务执行日志、报警通知、任务失败重试等实用工具,方便用户管理和监控任务。xxl-job的设计理念是简单易用、高可靠、高性能,适用于各种规模的任务调度需求。

二、场景描述

  一般在集群环境下,我们job被部署了多个节点,xxl-job需要做到只要有一个节点去执行job,这时候需要依赖xxl-job的任务路由策略进行分配节点。
  xxl-job提供的路由策略有:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移、分片广播。
  对于简单的任务,我们选择轮询、随机、故障转移都是可以的,但是对于执行时间长的任务,我们希望能分散到各个节点上执行,从而加快完成的速度,这时候就需要用到分片广播。

三、代码以及配置

xxl-job的页面配置如下,路由策略选择分片广播
图片.pngJobHandler的代码如下

/**
 * 分片广播任务
 */
@XxlJob("shardingJobHandler")
public void shardingJobHandler() throws Exception {

    // 分片参数
    int shardIndex = XxlJobHelper.getShardIndex();
    int shardTotal = XxlJobHelper.getShardTotal();

	XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);
	//获取需要处理的所有门店列表
	List<StoreInfo> storeInfoList = storeInfoMapper.selectList(new QueryWrapper<StoreInfo>().lambda().orderByDesc(StoreInfo::getStoreCode));

	//当前分片需要处理的门店列表
	List<StoreInfo> shardStoreInfoList = new ArrayList<>();
    // 业务逻辑
    for (int i = 0; i < storeInfoList.size(); i++) {
        if (i % shardTotal == shardIndex) {
            //将当前分片需要处理的门店加入list
            shardStoreInfoList.add(storeInfoList.get(i));
        }
    }
    //处理业务逻辑...
	service.doBusiness(shardStoreInfoList);
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天进步亿点点的小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值