xxl-job2.3.0源码分享
2022-03-26 18:56:27 0 举报
一张图,了解xxl-job2.3.0源代码
作者其他创作
大纲/内容
XxlJobAdminConfig读取配置文件加载XxlJobScheduler
/kill1. 从jobThreadRepository加载JobThread2. 停止线程调度,调用了interrupt()
/idleBeat:心跳探测任务是否在排队或执行中...
4. TriggerCallbackThread启动日志回调线程,1)线程1:callBackQueue队列消费,doCallback方法循环调度端连接集合,将信息推送到调度端/callback,调用失败的日志将记录到callbacklog文件夹下;2)线程2:监听callbacklog文件夹日志文件,重复上面的doCallback方法;
/log 1. 读取文件内容
1. XxlJobFileAppender日志文件夹初始化,为第4点callbacklog方法做准备.
3. JobLogFileCleanThread启动日志自动清除线程,启动后执行一次并休眠1天;
JobApiController/callback/registry/registryRemove
/run1. 从jobThreadRepository加载JobThread2. 从jobHandlerRepository加载JobHandler3. 堵塞策略执行:丢弃、覆盖、串行 isRunningOrHasQueue(判断丢弃、覆盖)4. 任务加入triggerQueue队列,等待消费5. JobThread.run()进行triggerQueue消费, 1)将参数放入传递子线程变量对象中; 2)调用业务方法; 3)记录本地文件日志; 4)将日志结果加入callBackQueue,等待消费
XxlJobExecutorstart()初始化
JobLogController/logDetailCat
TopeJobAutoConfiguration读取配置文件加载XxlJobSpringExecutor
执行端
4. JobCompleteHelper 加载10分钟没有执行端的回执,更新为失败:joblog_lost_fail
调度端
6. JobScheduleHelperscheduleThread: 1)过期段,根据过期策略执行; 2)上次预读段,trigger任务触发 任务刷新,最后一次执行时间 在还在预读端内,执行3逻辑 3)预读段,生成环刻度、入环、 刷新时间。ringThread: 1)读取环,trigger任务触发
XxlJobScheduler
2. 初始化调度端连接,address配置 1)域名高可用无效问题(pod); 2)乱序分配ip问题(需二开);
5. JobLogReportHelper 1)生成XxlJobLogReport,sql按天分组统计成功、失败数据; 2)清理XxlJobLog,按配置时间检索需删除的日志;
JobLogController/logKill
5. EmbedServer 1)启动netty http长连接的服务端; 2)启动注册功能,将执行器注册到调度端/registry 3)启动销毁功能,将执行器移除,调用调度端/registryRemove
XxlJobTrigger1. 加载XxlJobInfo.loadById(jobId)2. 加载XxlJobGroup.load(jobInfo.getJobGroup())3. 任务触发核心逻辑,分片时循环调用(不包含重试的分片调度) 1). 保存XxlJobLog 2). 初始化trigger-param 故障转移,调用执行器/beat 忙碌转移,调用执行器/idleBeat **** 3). 初始化路由address(路由策略) 4). 触发远程执行,调用执行器/run 5). 更新XxlJobLog
1. JobTriggerPoolHelper 1)start() 快慢线程池 2)trigger任务触发:Cron|手动|父任务|API|失败重试|调度过期补偿;
2. JobRegistryHelper 1)加载自动注册的XxlJobGroup 2)轮询XxlJobGroup,删除超过90S的XxlJobRegistry,并刷新90S内的address到XxlJobGroup中;故不要手动注册,会被覆盖
/beat 心跳探活...
3. JobFailMonitorHelper 1)加载失败的XxlJobLog; 2)轮询日志集合,加乐观锁 3)失败日志重试触发 4)更新日志为已处理
XxlJobSpringExecutor注册jobHandler,并启动JobExecutor->类级别注册 + 方法级别注册
0 条评论
下一页