1 目标

  1. 结构
  2. 核心逻辑
    1. 调度处理
      1. 如何触发
      2. 如何调度
    2. 恢复
  3. 设计上的借鉴

    2. 结构

    源码阅读:xxljob - 图1

  4. app管理

    1. xxl-job job定义/job组(Job handler的定义,Job Info,Job Group)
    2. 执行情况:执行日志(Job log)
    3. 调度、失败重试(Scheduler)
      1. 线程池的使用(任务的抽象)

触发模型

源码阅读:xxljob - 图2

调度模型

源码阅读:xxljob - 图3

调度主逻辑

  1. select * from xxl_job_lock where lock_name = ‘schedule_lock’ for update 的作用
  2. 查询XxlJobInfo,最近5秒的,线程数之和的20倍
  3. JobInfo的调度:
    1. 下次触发时间比现在大
      1. 各个MisfireStategy进行处理
        1. 不处理
        2. 立即处理一次(直接调用触发)
      2. 计算下次触发时间
        1. 下次触发时间比现在小
          1. 继续触发
          2. 更新下次触发时间
        2. 假如当前job在运行状态,下次触发时间在下个触发周期之内,则进入TimeRing
          1. 更新下次执行时间
    2. 假如还没有到触发时间
      1. 进入到TimeRing
  4. 更新JobInfo

    RingThread调度逻辑

  5. 循环去取RingData中jobId

  6. 去除当前秒的数据,进行触发

    问题:调度锁的作用?

    应用端启动过程

    核心是注册的过程

源码阅读:xxljob - 图4

  1. 客户端ExecutorRegistryThread
  2. 服务端:JobRegistryHelper

总结

  1. xxljob调度能力的怎么扩展?怎么解决