1.1 启动一个jetty server服务
首先加载ServerConnector, 加载HandlerCollection并设置handlers, 其中connector负责接受客户端http请求, 而handlers负责处理客户端请求, 最后就是调用start()方法启动jetty服务.
1.2 负责处理admin调度中心请求的JettyServerHandler
其实底层就是通过解析admin调度中心传递过来的request参数, 获取类名, 方法名, 参数以及参数类型, 执行反射调用, 并且将最终结果返回给调度中心.
1.3 NetComServerFactory类根据参数, 执行反射调用
这样admin调度中心就与executor完成了一次调度时的通信, 即每次当admin调度中心cron时间片到达后, 就会触发一次调度, 通过调用executor事先已经暴露的Jetty服务, 调用executor执行器服务, 进行本次的任务调度.
1.4 本篇加上前几篇解析的文章, 对于xxl-job分布式定时任务框架的原理做一个总结
首先admin调度中心提供心跳注册的http接口, 提供同一个group组下的每个executor执行器初始化时, 利用心跳机制, 向admin调度中心汇报自己jetty server暴露服务的ip+port.而admin调度中心, 再根据用户在前台页面配置的路由调度策略, 阻塞策略, cron表达式以及运行模式, 动态可配置化操作定时job的执行. 当配置的cron时间片到达后, 会通过动态代理的方式, 发起一次http请求, 调用executor执行器的服务, 并且接收执行结果, 判断本次调度是否成功.
而接着executor执行器端, 在初始化时, 就开启一个专门用于注册自己服务的工作线程, 向调度中心汇报自己提供的jetty服务地址及端口, 通过暴露自己的jetty server服务, 接收admin调度中心的每一次http调度请求, 再解析admin调度中心发送的request请求参数, 获取到本次调用的类名, 方法名称, 方法参数以及参数类型, 执行反射调用执行类, 并将执行结果返回给admin调度中心.
到此为止, 本次xxl-job分布式任务调度框架解析就告一段落.
美滋滋, 睡觉^_^