【xxl-job调度器的源码分析】
文章目录
- 调度器的介绍
- 调度器的核心功能
- 调度器的执行流程
调度器的介绍
调度中心(Admin)
负责任务调度、任务管理、任务日志查看、失败重试等控制逻辑;
通常是一个 Web 控制台 + 后台定时调度器;
将调度任务通过网络调用(如 HTTP)推送给执行器。
调度器的核心功能
- 定时调度任务
基于 Cron 表达式周期性触发;
支持一次性任务、延时任务等;
依赖数据库的定时扫描任务。 - 分片广播
多执行器分片执行任务(如多机器并行处理);
调度中心会根据任务配置进行广播或分片。 - 超时控制 + 失败重试
调度中心可以配置超时时间;
执行失败支持多次重试;
失败记录日志并可人工手动重试。 - 子任务链路
支持任务完成后触发子任务(依赖调度器完成的回调链)。
调度器的执行流程
整体的执行流程:
查询定时任务的线程的执行流程:
- 任务扫描线程
每隔 5s 毫秒扫描一次数据库,查找待执行的任务。 - 任务触发器
将任务分发给具体的执行器节点(可能是多个,取决于策略)。 - 注册 & 心跳
执行器定期向调度中心注册自己的信息:
调度中心会将一定时间无心跳的节点移除(默认 90 秒无心跳)。 - 失败重试
执行器执行失败后,会将失败日志插入日志,如果此时设置了失败重试次数failRetryCount 调度器就会执行失败重试,因此我们在这里需要考虑业务的幂等性,因为如果我们调度器正常调度,执行器返回的时候掉单,调度器会将任务置为失败,会失败重试,重复执行。 - 将执行时间超过10min的任务置为失败
考虑到会有任务的状态一直在持续执行中,admin会有专门的线程将执行时间超过10min的任务置为失败。