分布式调度平台XXL-JOB源码分析-执行器端
XxlJobSpringExecutor

.png)
.png)
.png)
.png)
.png)
XxlRpcProviderFactory
看名字就知道这个类是可以返回Rpc调用服务提供端的工厂类,接上文,看他的initRpcProvider方法。
.png)
由上面的代码跟进来,发现这就是启动了一个以netty作为通讯模型、Hessian作为序列化方式的、ExecutorServiceRegistry作为注册逻辑实现类的服务提供端。
此时的ServiceRegistry为ExecutorServiceRegistry,调用其start,以30秒的间隔和调度中心进行心跳通知,然后调用server的start方法,此时server为NettyHttpServer。

整个代码结构就是用netty启动了个服务,来看最后一个ChannelHandler,NettyHttpServerHandler。

调用私有方法process。

这里调用了xxlRpcProviderFactory的invokeService方法完成了服务实现的反射调用。

从serviceData中拿到我们之前调用addService方法添加的服务实现类,这里是ExecutorBizImpl,这里反射调用的方法是run。
ExecutorBizImpl
这个类实现了ExecutorBiz接口,看接口定义的方法,主要是作为执行器,提供给调度中心几个接口方法。

重点来看run方法。

首先XxlJobExecutor内部会有个以jobId为key,执行这个任务的线程为value的字段jobThreadRepository,我们首先去尝试的获取当前正在执行这个任务的线程,如果有,那就根据任务设置的运行模式进行处理,如下图。

如果没有正在执行此任务的线程,那就调用XxlJobExecutor.registJobThread()启动一个线程,最后将任务数据推送给这个可能是从jobThreadRepository获取到的也可能是新创建的线程,如下图。



JobThread的run方法会从triggerQueue里poll出任务,然后用之前设置的 handler进行execute的方法调用,并利用idleTimes字段进行线程无任务空转的次数控制,如下图。

至此,执行器完成了启动,暴露ExecutorBiz服务,接收任务调度数据TriggerParam,并在JobThread线程中完成任务配置的业务handler的执行。
时序图



分布式调度平台XXL-JOB源码分析-执行器端的更多相关文章
- 深入理解分布式调度框架TBSchedule及源码分析
简介 由于最近工作比较忙,前前后后花了两个月的时间把TBSchedule的源码翻了个底朝天.关于TBSchedule的使用,网上也有很多参考资料,这里不做过多的阐述.本文着重介绍TBSchedule的 ...
- quartz集群调度机制调研及源码分析---转载
quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...
- 定时组件quartz系列<三>quartz调度机制调研及源码分析
quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...
- (1)quartz集群调度机制调研及源码分析---转载
quartz2.2.1集群调度机制调研及源码分析 原文地址:http://demo.netfoucs.com/gklifg/article/details/27090179 引言quartz集群架构调 ...
- 基于Linux平台的libpcap源码分析和优化
目录 1..... libpcap简介... 1 2..... libpcap捕包过程... 2 2.1 数据包基本捕包流程... 2 2.2 libpcap捕包过程... ...
- Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析
上一章,我们分析Node类的源码,在Node类里面耦合了一个 Scheduler 类的对象,这章我们就来剖析Cocos2d-x的调度器 Scheduler 类的源码,从源码中去了解它的实现与应用方法. ...
- Java调度线程池ScheduledThreadPoolExecutor源码分析
最近新接手的项目里大量使用了ScheduledThreadPoolExecutor类去执行一些定时任务,之前一直没有机会研究这个类的源码,这次趁着机会好好研读一下. 该类主要还是基于ThreadPoo ...
- 美团分布式ID生成框架Leaf源码分析及优化改进
本文主要是对美团的分布式ID框架Leaf的原理进行介绍,针对Leaf原项目中的一些issue,对Leaf项目进行功能增强,问题修复及优化改进,改进后的项目地址在这里: Leaf项目改进计划 https ...
- 【Cocos2d-x 3.x】 调度器Scheduler类源码分析
非个人的全部理解,部分摘自cocos官网教程,感谢cocos官网. 在<CCScheduler.h>头文件中,定义了关于调度器的五个类:Timer,TimerTargetSelector, ...
随机推荐
- kexue shangwang
根据实践,pptp.IPsec甚至OpenVPN等kexue上网法已经无法顺利翻越GFW.通过抓包可知,GFW会将pptp的握手期间的ack包吞掉,导致本地一直无法收到服务器端的响应.而OpenVPN ...
- UE4 ios环境搭建备忘
1.windows.mac安装证书 2.安装xcode .app -- 路径可以拖入 sudo gem install xcodeproj 3.错误处理 Setting up Mono Running ...
- Survey of single-target visual tracking methods based on online learning 翻译
基于在线学习的单目标跟踪算法调研 摘要 视觉跟踪在计算机视觉和机器人学领域是一个流行和有挑战的话题.由于多种场景下出现的目标外貌和复杂环境变量的改变,先进的跟踪框架就有必要采用在线学习的原理.本论文简 ...
- Influx Sql系列教程三:measurement 表
在influxdb中measurement相当于mysql中的表,可以理解为一条一条记录都是存与measurent中的,一个数据库中可以有多个measurement,一个measurement中可以存 ...
- [转帖]UID卡、CUID卡、FUID卡、UFUID卡的区别及写入方式
UID卡.CUID卡.FUID卡.UFUID卡的区别及写入方式 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...
- python学习-69 包装和授权
包装 1.二次加工标准类型(包装) class List(list): def append(self, a_objcet): if type(a_objcet) is str: super().ap ...
- Windows 10部署教程
1. 获取主板密钥 在powershell中执行: (Get-WmiObject -query 'select * from softwareLicensingService').OA3xOrigin ...
- 基于OpenCV制作道路车辆计数应用程序
基于OpenCV制作道路车辆计数应用程序 发展前景 随着科学技术的进步和工业的发展,城市中交通量激增,原始的交通方式已不能满足要求:同时,由于工业发展为城市交通提供的各种交通工具越来越多,从而加速了城 ...
- quartz2.3.0(三)cron定义调度周期
cron总结 cron详解参见:<quartz CronExpression表达式> CronTrigger配置完整格式为7个: [秒] [分] [小时] [日] [月] ...
- 禁止迅雷极速版被强制升级为迅雷x
PS:迅雷极速版( ThunderSpeed1.0.34.360 )下载地址: https://pan.baidu.com/s/1wuBOpNbim5jBru03AfSAVg 按照下面的这个路径去找. ...