xxl-job流程图
2023-09-13 14:40:20 2 举报
xxl-job源码流程图
作者其他创作
大纲/内容
获取需要执行的任务信息
启动线程
如果在1分钟内执行时间大于500ms并且执行次数大于10次,表示当前任务执行过慢,将使用慢速触发器线程池
更新所有任务的下次触发时间
计算当前时间对应时间轮中的位置
获取任务
当前时间是否大于触发时间
key: pid
IJobHandler
判断是否获取到任务
利用单线程进行任务调度,将任务定时投递给触发器,包括两个功能:功能一:将已经过期5秒的任务根据过期策略进行处理功能二:5秒以内未触发的任务表示应该正常触发定时任务,并预读一次任务放入时间轮中功能三:将未来5秒内的任务放入时间轮中功能四:将时间轮中当前秒数以及前一秒对应的所有任务进行触发
启动定时清除日志线程
是
调用@XxlJob注解中配置的init方法进行初始化
判断获取到空任务的次数是否大于30次
否
triggerPool_触发任务逻辑
scheduleThread添加任务调度逻辑
启动EmbedServer为admin端进行rpc调用,触发任务
遍历任务列表进行任务触发
获取触发任务
按照传入的index值获取执行器地址
注册或删除线程池
ringThread时间轮执行任务调度逻辑
慢速线程池
判断是否为分片广播
从时间轮中读取要执行的任务列表
jobHandler
快速线程池队列大小为1000,慢速线程池队列大小为20001、如果一分钟内每次执行时间大于500ms并且执行总次数大于10次,表示触发当前任务过慢,将使用慢速触发器线程池2、其他情况放入快速触发器线程池
判断使用快速线程池还是慢速线程池
进行远程调用
executor应用启动
利用数据库当前读机制进行加锁
快速线程池
获取当前时间
取出队列中所有任务,并将结果返回给触发器回调线程
将添加了@XxlJob注解的方法保存到jobHandlerRepository容器中
调用XxlJobAdminConfig.afterPropertiesSet()方法
调用xxlJobScheduler.init()方法
延迟启动,确保JobTriggerPoolHelper中的线程池启动完毕
从triggerQueue队列中获取任务
判断是否还有任务
触发任务
获取预读任务数量,默认6000条
初始化调度服务客户端
JobThread
根据jobId获取jobThread和jobHandler
调用XxlJobExecutor.start()方法
JobTriggerPoolHelper启动快慢触发器线程池
触发当前任务
包括两个功能:功能一:通过对执行器手动启动或停止,调用admin工程中的接口进行注册或删除操作功能二:30秒执行一次检测服务,判断执行器是否还存活,执行步骤如下: 1、删除90秒以上没有进行心跳更新的执行器 2、将存活的执行器地址更新到xxl_job_group表中
六大关键组件
JobCompleteHelper更新失败任务的状态,执行子任务
读取未来5秒之前的任务
JobScheduleHelper启动任务调度线程和调用时间轮线程
jobHandlerRepository
JobLogReportHelper启动任务统计线程
判断jobThread是否存在
更新调度日志
判断线程池是否停止
将triggerParam放入triggerQueue队列中
triggerQueue
刷新下次运行时间
将当前线程从jobThreadRepository中移除,并停止当前线程
启动触发回调线程
清除任务列表
将jobHandler封装为新的jobThread并启动
计算时间对齐,并进行睡眠
将任务添加到触发器线程池
根据admin传过来的jobHandler的名称判断是否和旧的jobHandler一致
启动新的线程,并且等待任务执行完成或者超时
调用@XxlJob注解中配置的destroy方法进行销毁操作
admin应用启动
结束
提交事物
初始化日志路径
启动线程池
按照配置的路由规则获取执行器地址
判断是否有要执行的任务
triggerParam
根据超时策略进行触发任务
JobFailMonitorHelper启动日志检测服务,可进行失败预警
启动接收任务的rpc线程,调用embedServer.start()
进行一次预读,将任务放入时间轮中
是否超时5秒以上
执行器监控
在当前线程中执行任务
调度线程读取任务列表
远程调用执行器
定时监测线程
将未到执行时间的任务放入时间轮中
放入任务
记录触发日志
结束线程
任务触发流程
服务注册功能:1、30秒进行一次服务注册2、执行器服务已经停止,需要进行注销操作
jobThreadRepository
key: handler name
触发器线程池
判断线程是否处于stop状态
将旧的jobHandler替换为新的jobHandler
JobRegistryHelper启动两个线程池对执行器进行注册或删除操作
记录任务执行结果,并将结果发送给触发器回调线程
判断线程是否要停止
进行服务注册与注销
判断是否设置超时时间
获取执行器信息
启动调用run方法
收藏
0 条评论
下一页