xxl-job版本:2.3.0
netty版本:netty-all-4.1.63.final
一、基于spring容器
客户端启动流程:
客户端如springboot应用引入xxl-core的jar包后,启动springboot过程中会调用xxl-core中都方法运行一个netty服务端、默认端口9999(每个微服务都是netty服务端);
在运行9999服务之前会通过扫描注解方式将所有的jobHandler注册到内存中;
com.xxl.job.core.executor.impl.XxlJobSpringExecutor#afterSingletonsInstantiated//执行器中调用父类的初始化服务器方法
com.xxl.job.core.executor.impl.XxlJobSpringExecutor#initJobHandlerMethodRepository//启动9999服务前把job注册到admin
com.xxl.job.core.executor.XxlJobExecutor#initEmbedServer
com.xxl.job.core.server.EmbedServer#start//创建netty服务
com/xxl/job/core/server/EmbedServer.java:79 //绑定端口
解析注解并注册job handler:
com.xxl.job.core.executor.impl.XxlJobSpringExecutor#initJobHandlerMethodRepository
xxl-admin服务端启动及调用客户端流程:
admin启动流程同springboot启动流程;
启动过程中组件XxlJobAdminConfig实现spring中的接口InitializingBean.afterPropertiesSet(),完成配置加载后,就开始启动admin的scheduler调度器的运行;
com.xxl.job.admin.core.conf.XxlJobAdminConfig#afterPropertiesSet
com.xxl.job.admin.core.scheduler.XxlJobScheduler#init
扫描job_info表并触发job调用:
com/xxl/job/admin/core/thread/JobScheduleHelper.java:94
com.xxl.job.admin.core.trigger.XxlJobTrigger#trigger
com.xxl.job.admin.core.trigger.XxlJobTrigger#processTrigger
com.xxl.job.admin.core.trigger.XxlJobTrigger#runExecutor //调用xxl客户端执行
com.xxl.job.core.util.XxlJobRemotingUtil#postBody
java.net.URL#openConnection() //最后使用HttpURLConnection完成链接的调用???可以基于NettyClient实现job的触发(elastic-job也没有使用nettyclient,而是使用goole的eventbus)