xx-job执行流程
2024-10-15 21:51:49 0 举报
xx-job执行流程图
作者其他创作
大纲/内容
触发逻辑
/kill
1. 初始化2. 启动了一个trigger pool start线程池3. 注册中心相关的东西 registry monitor run4. 作业失败监控相关5. 作业丢失相关6. 日志报表相关7. 启动了一个调度线程相关
1.注册作业处理器2. 在线编辑3.调用父类start方法
2
jobThreadRepository会往一个map里注册执行器 value就是执行器方法key就是注解的value,也就是执行器的名称,后面回去调用这里面的方法
启动了两个线程 一个是ringThread 和 scheduleThread
scheduleThread1. 获取db锁2. 预读 扫描作业表,最多获取6000(和配置文件有关)个作业3. 判断当前时间与任务触发时间4. preReadSuc true代表读到作业吗,休眠1s(严格来说应该是小于等于1s因为要做时间对齐),false 没有读到 休眠5s
JobCompleteHelper
(30秒执行一次)1.调用调度中心的api====api/registry
1. 注册作业初始化
1. 调用初始化方法2. 执行业务逻辑2.1 获取队列数据2.2 封装一个xxJobContentx对象,并且封装到ThreadLocal中去2.3 写日志文件 2.4 执行handler方法,====线程销毁时 会执行下面的方法===3. 回调调度中心结果4.调用handler.destroy();
监听服务端口9999
slowTriggerPool
处理请求逻辑 process方法
triggerLogIdSet
run方法往队列里方参数
XxlJobSpringExecutor.afterSingletonsInstantiated()
JobRegistryHelper 注册接口
是
任务队列
超过触发时间5秒
/idleBeat
ringThread1. 每隔1秒跑一次 2. 获取当前秒和前一秒对应的作业3. 遍历作业触发(Job TriggerPoolHelper.trigger)
1. 处理请求2. 解析响应 将对象转换成json3.将响应json通过socket方法返回回去
创建了一个JobHandler
/beat
小于触发时间
监控线程1.30秒跑一次
server服务
run方法
1. 根据执行器地址 获取一个biz对象2. 然后调用他run方法获取触发结果
父类start方法
3.当前时间
fastTriggerPool
biz线程池 用于在netty的Hanlder中处理业务
根据logId更新调度日志 处理时间 处理code 处理msg
否
xxl.job.i18n=zh_CN1. 国际化 :从不同的资源文件中 获取对应的属性值在启动时有3个不同语言的配置替换文件,将枚举的title参数替换成选择的语言,
2. 初始化了两个快慢线程池fastTriggerPool和slowTriggerPool
1.前置检查 请求方法、url、token等参数2. 根据请求的不同url调用不同的业务处理方法
1.将作业放到ringData数据结构中,2.刷新作业的下次触发事件
riggerQueue
/run
业务线程池
返回到这里
注册线程
获取map的作业
XxlJobScheduler.init方法
调度中心启动流程
callbackThreadPool 执行器回调的时候会往这个线程池添加任务
boss线程池
超过触发时间但是不超过5s
1分钟内作业超时次数 超过10次
监听每个socket的数据
workerGroup线程池
5
1. 更新xxl-job表的update_time的接口2. 更新失败则插入
执行器启动流程
/log
1. 初始化执行器的业务处理对象2. 启动了一个thread 用于接收请求(基于netty)
6
收藏
收藏
0 条评论
下一页