微服务篇之任务调度

一、xxl-job的作用

  1. 解决集群任务的重复执行问题。

  2. cron表达式定义灵活。

  3. 定时任务失败了,重试和统计。

  4. 任务量大,分片执行。

二、xxl-job路由策略

  1. FIRST(第一个):固定选择第一个机器。

  2. LAST(最后一个):固定选择最后一个机器。

3. ROUND(轮询)。

  1. RANDOM(随机):随机选择在线的机器。

  2. CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。

  3. LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举。

  4. LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举。

8. FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度。

  1. BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度。

10. SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务。

三、xxl-job执行失败

故障转移+失败重试,查看日志分析----> 邮件告警。

四、处理大量并发任务

执行器集群部署时,任务路由策略选择分片广播 情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务。

分片参数:1. index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号。

  1. total:总分片数,执行器集群的总机器数量。

具体代码如下:

java 复制代码
@XxlJob("shadingSample")
    public void shardingJobHandler() throws Exception {
        // 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();
        XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);
        // 业务逻辑
        List<Integer> list = getList();
        for (Integer integer : list) {
            if (integer % shardTotal == shardIndex) {
                System.out.println("第" + shardIndex + "分片执行,执行数据为:" + integer);
            }
        }
    }

五、面试题

**面试官:**xxl-job路由策略有哪些?

**候选人:**xxl-job提供了很多的路由策略,我们平时用的较多就是:轮询、故障转移、分片广播...

**面试官:**xxl-job任务执行失败怎么解决?

**候选人:**有这么几个操作:

第一:路由策略选择故障转移,优先使用健康的实例来执行任务。

第二,如果还有失败的,我们在创建任务时,可以设置重试次数。

第三,如果还有失败的,就可以查看日志或者配置邮件告警来通知相关负责人解决。

**面试官:**如果有大数据量的任务同时都需要执行,怎么解决?

**候选人:**我们会让部署多个实例,共同去执行这些批量的任务,其中任务的路由策略是分片广播

在任务执行的代码中可以获取分片总数和当前分片,按照取模的方式分摊到各个实例执行就可以。

相关推荐
NE_STOP2 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园2 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆2 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
霸道流氓气质3 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz3 小时前
Maven依赖冲突
java·服务器·maven
swordbob3 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯3 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网3 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
摇滚侠3 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
源分享3 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm