核心的流程时序图如下。
如上图所示,淘宝调度管理器在创建后就会执行一系列初始化过程,并且启动一些定时线程。具体流程描述如下:
1.创建定时调度器。
2.从配置中心加载任务配置信息。
3.创建一个本地的服务器信息。
4.加载任务调度运行信息。(没有的话会自动创建)。主要是支持任务可以多环境运行,生产的运行信息中的任务类型是:原始任务类型:环境。
5.注册服务器信息到注册中心。
6.启动定时器。定时执行心跳任务。
6.1心跳任务会刷新注册中心的PAMIRS_SCHEDULE_SERVER表的HEARTBEAT_TIME字段的值。
6.2当有主机发生变化的时候重新给服务器分配队列。
6.3若调度暂停或者处理器睡眠则重新获取当前服务器队列。
6.5若发送心跳异常,则清空队列和处理器中的任务,避免心跳失败导致的重复任务执行。
7.启动新的线程。等待主机获得队列。直到获得队列为止,一直会循环等待。
8.若获得任务队列。则开始计算时间进入调度。
9.若开始时间配置空或者立即执行,则会立即会对调度器调度。
创建新的调度处理器开始处理队列中的任务。
10.否则计算下次符合“cron”表达式配置的开始有效时间。
启动一个定时器,当时间到达则恢复任务调度。
11.计算符合“cron”表达式配置的结束有效时间。
启动一个定时器,当时间到达则停止任务调度。