微服务篇之任务调度

一、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任务执行失败怎么解决?

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

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

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

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

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

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

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

相关推荐
霖霖总总6 分钟前
[小技巧65]深入 InnoDB 页的逻辑存储结构:16KB 页的逻辑全景解析
数据库·mysql
数研小生7 分钟前
关键词搜索京东列表API技术对接指南
大数据·数据库·爬虫
菜鸟233号24 分钟前
力扣647 回文子串 java实现
java·数据结构·leetcode·动态规划
南风知我意95730 分钟前
【前端面试5】手写Function原型方法
前端·面试·职场和发展
qq_124987075330 分钟前
基于Java Web的城市花园小区维修管理系统的设计与实现(源码+论文+部署+安装)
java·开发语言·前端·spring boot·spring·毕业设计·计算机毕业设计
h7ml39 分钟前
查券返利机器人的OCR识别集成:Java Tesseract+OpenCV优化图片验证码的自动解析方案
java·机器人·ocr
野犬寒鸦40 分钟前
从零起步学习并发编程 || 第五章:悲观锁与乐观锁的思想与实现及实战应用与问题
java·服务器·数据库·学习·语言模型
Volunteer Technology44 分钟前
Sentinel的限流算法
java·python·算法
VX:Fegn089544 分钟前
计算机毕业设计|基于springboot + vue云租车平台系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
岁岁种桃花儿1 小时前
SpringCloud从入门到上天:Nacos做微服务注册中心
java·spring cloud·微服务