高级篇 I: 作业的配置、注册、调度

前面撰写的“基础篇”、“使用篇”,基本阐述了如何使用elastic-job-lite进行定时作业的开发、监控,以及对作业做一些特殊处理,如作业监听。

在此后续的“高级篇”,我们开始深挖一下源代码层面,了解底层的实现及原理。

OK,不在絮叨,现在开始由浅入深,慢慢挖起。

 

作业配置

之前搭建的源码用例环境中,simple类型作业 和 dataflow类型作业, 分别对应都有个config类,

 

可见,两个代码共同之处(参照图中 标出的 1 处),两种作业config类最终返回的都是 JobScheduler,构造过程中,使用到了注册中心、具体的作业对象以及作业相关配置属性;

具体作业使用的配置信息,都是放在了LiteJobConfiguration (参照图中 标出的 2 处),只是对应不同作业类型时,又使用了具体不同的作业配置类型(参照图中 标出的 3 处 ):

  • simple   类型作业,用的是  SimpleJobConfiguration
  • dataflow类型作业,用的是  DataflowJobConfiguration

这两个作业配置类型,类间关系为 ,都实现同一个接口  JobTypeConfiguration。


SimpleJobConfiguration  DataflowJobConfiguration 构建时,都使用到了JobCoreConfiguration

 

一路下来,可见Elastic-Job配置分为3个层级,分别是Core, Type和Root。每个层级使用相似于装饰者模式的方式装配。

Core对应JobCoreConfiguration,用于提供作业核心配置信息,如:作业名称、分片总数、CRON表达式等。

Type对应JobTypeConfiguration,有3个子类分别对应SIMPLE, DATAFLOW和SCRIPT类型作业,提供3种作业需要的不同配置,如:DATAFLOW类型是否流式处理或SCRIPT类型的命令行等。

Root对应JobRootConfiguration,有2个子类分别对应Lite和Cloud部署类型,提供不同部署类型所需的配置,如:Lite类型的是否需要覆盖本地配置或Cloud占用CPU或Memory数量等。

 

作业的类间关系:


讲完了,不同作业如何进行配置,come on 继续,看看核心类JobScheduler如何。

作业注册、调度

用例环境中,SimpleJobConfig 和 DataflowJobConfig 中获取JobScheduler的方法上中,返回的都是 SpringJobScheduler;且方法上,都有注解 ,即bean初始化结束后会立马调用init方法

SimpleJobConfig为例,

JobScheduler类间关系


进入JobScheduler,发现调用到一个私有的构造函数,完成添加作业实例、绑定作业监听器、通过外观模式装配各种service。

其中,JobRegistry使用了经典的通过double check和volatile方式,实现“单例模式”:


查看init方法,红色部分的代码,完成了作业注册、通过将作业关联到quartz,实现定时的作业调度,以及作业注册到Zookeeper

重点关注下createJobDetail 方法,通过LiteJob代理quartz中的Job:


至此,作业都扔到(或关联到)quartz上了,后续定时调度,就是quartz的定时机制去触发执行了。

下一篇,我们将讲述,quartz触发执行后, simple作业和dataflow作业 具体的执行过程 -- 高级篇 II: 作业的执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值