1 目标
- 结构
- 核心逻辑
- 调度处理
- 如何触发
- 如何调度
- 恢复
- 调度处理
-
2. 结构
app管理
- xxl-job job定义/job组(Job handler的定义,Job Info,Job Group)
- 执行情况:执行日志(Job log)
- 调度、失败重试(Scheduler)
- 线程池的使用(任务的抽象)
触发模型
调度模型
调度主逻辑
- select * from xxl_job_lock where lock_name = ‘schedule_lock’ for update 的作用
- 查询XxlJobInfo,最近5秒的,线程数之和的20倍
- JobInfo的调度:
- 下次触发时间比现在大
- 各个MisfireStategy进行处理
- 不处理
- 立即处理一次(直接调用触发)
- 计算下次触发时间
- 下次触发时间比现在小
- 继续触发
- 更新下次触发时间
- 假如当前job在运行状态,下次触发时间在下个触发周期之内,则进入TimeRing
- 更新下次执行时间
- 下次触发时间比现在小
- 各个MisfireStategy进行处理
- 假如还没有到触发时间
- 进入到TimeRing
- 下次触发时间比现在大
-
RingThread调度逻辑
循环去取RingData中jobId
- 去除当前秒的数据,进行触发
问题:调度锁的作用?
应用端启动过程
核心是注册的过程
- 客户端ExecutorRegistryThread
- 服务端:JobRegistryHelper
总结
- xxljob调度能力的怎么扩展?怎么解决