- 什么是XXL-JOB?
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速,学习简单,轻量级,易扩展,其是基于QUARTZ之上的又一层封装。
该调度框架学习很简单,具体信息可查看官方文档,这里主要是对其启动流程进行分析。 - 整体架构图
从架构图很容易看出,这个XXL-JOB要分为两部分: - 调度中心:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台,另外还提供了日志等其他辅助功能。
- 执行器:负责接收“调度中心”的调度并执行,是核心业务的执行者,可直接部署单独的执行器,也可将执行器整合到现有项目。
- 整个框架项目结构
只需要把从github上拉下来的项目直接在本地部署就行,调度中心可以直接使用。 - 启动流程分析
调度中心
- 初始化SchedulerFactoryBean,这是spring对Quartz实现的一个封装,里面包含SchedulerFactory,DataSource,Excuotr,QuartzProperties,JobFactory等基础信息。
- 初始化XxlJobDynamicScheduler并调用他的初始化(start)方法,该方法完成的工作主要有这几部分
这里有一点值得要说的是,最后的initRpcProvider是以controller方式暴露AdminBiz服务(task回调,注册执行器,移除执行器),具体实现可以看XxlRpcReferenceBean的getObject方法。
执行器
执行器的启动流程没什么,主要是看XxlJobSpringExcutor的start方法
这里的initRpcProvider是真的以rpc的方式暴露服务(只暴露了ExecutorBiz),具体执行远程服务的流程是Server.handle()–>handlerWrap.handle()–>handleConnection.handle()–>ServerHandler.handle()–>XxlRpcProviderFactory.invokeService()–>ExecutorBiz.run()这里面涉及到了一些jetty的东西,暂时还没研究