分布式调度平台XXL-JOB源码分析

XxlJobExecutorApplication为我们执行器的启动项,其中有个XxlJobConfig的配置项,发现其中有个属性为adminAddresses,这个就是我们调度中心的地址。
我们发现一个执行器端的关键Bean,XxlJobSpringExecutor,
声明了init方法为start,点进来,
它又实现了ApplicationContextAware接口,用来保存spring的上下文信息。
它还有个父类XxlJobExecutor,没有其他实现子类。
程序开始执行start方法,
 
第一步,调用了本类的私有方法,这个方法就是把JobHandler的实现类取出来,再调用registJobHandler(name, handler)进行注册。
registJobHandler的实现方法在父类中,很简单,维护了一个Map,估计后面进行任务的执行时会来这个map里面进行查询。
第二步,估计是初始化了Glue的执行器。
第三步,调用父类的start方法,大部分的业务逻辑都在这里。
 
1.日志处理器初始化
2.
3.任务日志清除
4.
5.启动另一个执行器的执行线程XxlRpcProviderFactory这个类是XXl其他的开源项目,自研RPC。
XxlRpcProviderFactory类
 
由上面的代码跟进来,发现这就是启动了一个以netty作为通讯模型、Hessian作为序列化方式的服务提供端。
ExecutorServiceRegistry作为注册器,先看看这个类。
 
处理请求的关键类,是ExecutorBizImpl,我们来看看它。

调度中心端配置类XxlJobAdminConfig,XxlJobScheduler这个组件实现了InitializingBean接口,所以spring容器会调用afterPropertiesSet方法,此方法如下:

第一步国际化相关

第二步监控相关

第三步失败任务监控?

第四步启动admin端服务

第五步JobScheduleHelper调度器,简单的看了一眼代码,应该是负责更新xxl_job_info表下次执行时间的schedule,但是我们由此类发现了一个JobTriggerPoolHelper类,大概率是负责调度任务的

JobTriggerPoolHelper

此类中有两个线程池fastTriggerPool和slowTriggerPool,顾名思义,应该分别是执行较快任务和较慢任务的,后查官方文档,如下:

猜你喜欢

转载自www.cnblogs.com/jiangyang/p/11576931.html