xxl-job如何实现分片处理

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路xxl-job如何实现分片处理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、简介

  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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154489.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!