一、定时任务的生成执行过程
CacheCloud定时任务执行的过程,以taskServie为例:
首先指定需要执行的任务,也即task,然后才能执行定时任务。因此在CacheCloud中,可以看到定时任务的添加是在TaskService中的,可以看到有许多带add前缀的task任务。可以看到定时任务需要先提交到taskQueue中,然后经过taskService触发excuteNewTask,执行任务,此时会先查询还没执行的定时任务列表,找到未执行的定时任务,然后获取具体定时任务的执行步骤getTaskSteps,拿到之后,会拿到需要执行的若干步骤,就可以执行了。执行完成后,会更新taskQueue表中定时任务的状态。
二、定时任务的来源
比如部署应用的时候就会有addTask这个动作和提交检测
比如检测此时就会添加如下定时任务到taskQueue中等待taskService执行executeNewTask:
addAppScanKeyTask addAppBigKeyTask addAppIdleKeyTask addAppHotKeyTask addAppDelKeyTask addAppScanCleanTask
以addAppBigKeyTask为例,com.sohu.cache.web.controller.AppToolController#submitDiagnostic可以看到需要经过:
更新审批信息 生成并保存taskqueue 更新task信息
三、TaskJob执行的过程
通过上下文拿到定时任务TaskService,执行taskService.executeNewTask() 获取任务队列列表是task是new状态的列表 循环任务队列,获取具体的task,更新task状态为准备执行READY 执行任务提交,然后拿到具体的task执行 future 获取具体的队列task,进行判断空和状态 更新队列task为正在执行RUNNING 获取任务步骤getTaskSteps 将相关task变成taskflow 设置task步骤信息放入到数据库 准备 TaskStepFlow 遍历taskStepFlow 更新TaskQueue状态
taskStep的过程以AppDelKeyTask为例:
检查集群参数 创建delete key 等到delete key完成 工单审批
相关流程可以详见xmind: