分布式任务调度-xxl-job

12.1. 什么场景用了任务调度

xxl-job解决的问题

  1. 解决集群任务的重复执行问题(你用Springtask的话很容易造成任务重复执行)
  2. cron表达式定义灵活(SpringTask是把cron表达式定义在代码中的,xxl-job可以定义在页面上,管理灵活,修改方便。)
  3. 定时任务失败了,重试和统计。(问题分析,邮件告警,故障转移)
  4. 任务量大,分片执行(花呗通知还款)
12.2. xxl-job路由策略有哪些?

任务找机器执行,找哪台的策略就是路由策略。(实例就是机器)

    1. 轮询(挨个实例去轮询)
    2. 故障转移(按照循序进行心跳检测,第一个心跳检测成功的机器选定为目标器并发起调度。)
    3. 分片广播(广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数,可根据分片参数开发分片任务。)
    4. 随机
    5. 第一个
    6. 最后一个
    7. 一次性hash
    8. 最不经常使用
    9. 最近最久未使用
    10. 忙碌转移
12.3. xxl-job任务执行失败怎么解决?

故障转移+失败重试:路由策略改为故障转移,修改失败重试的次数。

查看日志:任务失败后可以查看。

邮件告警:

12.4. 如果有大数据量的任务同时都需要执行,怎么解决?

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

一次任务执行多个任务项,任务项模于总分片数,找到对应的机器(分片)。

路由策略选择分片广播,代码中拿到分片参数

XxljboHelper.getshardIndex() 获取分片序号

XxljboHelper.getshardTotal() 获取总分片数

你可能感兴趣的:(Java开发面试题,分布式,java,spring)