一、简介
xxl-job是一款开源、分布式任务调度平台。它基于Java语言开发,提供Web界面和API接口,支持多种任务调度方式,如Cron、API、固定速率等,并具备任务依赖、任务分片、任务路由等高级功能。xxl-job还提供任务执行日志、报警通知、任务失败重试等实用工具,方便用户管理和监控任务。xxl-job的设计理念是简单易用、高可靠、高性能,适用于各种规模的任务调度需求。
二、场景描述
一般在集群环境下,我们job被部署了多个节点,xxl-job需要做到只要有一个节点去执行job,这时候需要依赖xxl-job的任务路由策略进行分配节点。
xxl-job提供的路由策略有:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移、分片广播。
对于简单的任务,我们选择轮询、随机、故障转移都是可以的,但是对于执行时间长的任务,我们希望能分散到各个节点上执行,从而加快完成的速度,这时候就需要用到分片广播。
三、代码以及配置
xxl-job的页面配置如下,路由策略选择分片广播
JobHandler的代码如下
/**
* 分片广播任务
*/
@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