XXL-JOB解析

1.服务注册


启动任务中心,访问调度中心执行器管理页面从xxl_job_qrtz_trigger_group表中查询出所有的执行器数据,其中Online机器会根据AppName从xxl_job_qrtz_trigger_registry表中查询;


    由于XxlJobExecutor执行器实现了ApplicationContextAware, ApplicationListener两个接口,当执行器启动容器初始化完成之后,XxlJobExecutor获取到Spring容器的所有Bean,然后处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等;

执行器任务的注册依赖xxl-job-core组件,组件中的XxlJobExecutor类包括执行器的注册信息、job server信息、初始化job handler信息(注册job)、destory job executor、job handler repository(注册job)、job thread repository六个部分。


执行器启动的时候AdminApiUtil.init(adminAddresses)完成admin地址初始化,allowCallApi为true;NetComServerFactory初始化的同时会初始化一个JettyServer容器,NetComServerFactory调用serverFactory.start(port, ip, appName)方法开始运行JettyServer会开启多线程

完成以下任务:初始化一个非阻塞的Server(The Server实际上就是一个处理HTTP连接和请求的容器)、HTTP connector、Set a handler、server.start()方法开始处理HTTP请求、ExecutorRegistryThread.getInstance().start(port, ip, appName)注册线程向任务中心进行注册;



2.任务调度


data-job-admin组件中的XxlJobDynamicScheduler类封装了任务调度的方法。XxlJobDynamicScheduler实现了ApplicationContextAware, InitializingBean两个接口,在admin容器初始化完成之后,XxlJobDynamicScheduler可以从容器中获取到所有Bean,而InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。

init()方法更新注册地址registMap以及从队列里面获取jobLogId生产日志。triggerJob、resumeJob等等方法中的scheduler.scheduleJob(jobDetail, cronTrigger)可以触发定时任务调度;每次在添加job的时候,先获取到jobDetail、cronTrigger两个参数,其中jobDetail中有name group jobClass jobDataMap JobKey等属性,

jobDetail指定了RemoteHttpJobBean作为远程回调执行器的bean,RemoteHttpJobBean继承了QuartzJobBean,scheduler.scheduleJob(jobDetail, cronTrigger)每次调度的时候会触发RemoteHttpJobBean的executeInternal()方法调用runExecutor()调用执行器;

猜你喜欢

转载自blog.csdn.net/qq_30219537/article/details/80959433