接着调度中心源码开始分析,上一篇中,调度中心触发调度任务之后,发送RPC请求到了服务端,也就是执行器这一边,本篇主要讲执行器这一块接收到请求之后如何处理的
服务端应用里面,实际上是在应用中,内嵌了一个jetty服务器, 服务器在xxlJobExecutor 初始化的时候启动。
本次示例代码中是由spring-boot 中截取而来, 该项目中,由XxlJobConfig 这个配置类来配置Executor
由上面可以看出,初始化 XxlJobExecutor 这个bean之后,会默认执行start 方法
上面初始化的那些方法,着重看 initExecutorServer () 这个方法
看下启动jetty服务器的时候是什么样的
JettyServerHandler 接收请求后的处理流程
通过上面的handle中的代码可以知道,主要的执行逻辑在doInvoke 的方法中,
通过调度中心发过来的参数,以及执行器的处理逻辑,我们有理由可以得出此时是执行的是ExecutorBizImpl中的run方法
通过上面我们可以发现, 执行executorBiz的run 方法的时候, 首先会通过JOBID,从本地线程库里面获取该任务对应的线程,同时,如果任务的JobHandler有更新的话,
那么会自动使用最新的jobHandler , 同时根据任务的阻塞策略。 执行不同的操作。 最终,如果是第一次执行任务的时候,系统会分配给改任务一个线程,同时启动该线程。
接下来,可以在具体看一下JobThread 的run方法,看下最终的任务是如何执行的。
最后来看一下,TriggerCallbackThread.pushCallBack ()这个方法,将本次任务记录的日志ID和处理结果放入队列中去了,
以上就是XXL-JOB从调用到处理的核心代码分析。
领取专属 10元无门槛券
私享最新 技术干货