ElasticJob-Lite 框架源码学习

目录

ElasticJob-Lite 框架源码学习

1. 3W1H(What、Where、Why、How)

1.1 What? (What is ElasticJob)

1.2 Where? (Where to use it?)

1.3Why?(Why use it?)

1.4 How?(How does it do?)

2.准备

2.1环境版本

2.2 源码获取

3.启动运行

3.1 编译打包

3.2 启动zookeeper

3.3 启动job

3.4 查看启动日志

4.功能测试

4.1测试流程:

4.2日志分析

5.源码学习

5.1CoordinatorRegistryCenter-注册中心

5.2 ScheduleJobBootstrap-周期性调度作业启动类

-2.代理操作门面类

-4.设置作业配置

-5.初始化调度管理器

-6.初始化Lite job外观类

-7.初始化 ElasticJob 作业执行器

-8.设置分布式单次执行作业监听

-9.最后,创建任务调度控制器

5.3 执行schedule调度任务

 6.ElasticJob 的缺点


ElasticJob-Lite 框架源码学习

在正式开始之前,我们先思考下方3W1H(What、Where、Why、How)这四个问题,对ElasticJob进行初步的了解。

1. 3W1H(What、Where、Why、How)

1.1 What? (What is ElasticJob)

ElasticJob 是一个分布式调度解决方案,由2个相互独立的子项目 Elastic-Lite 和 ElasticJob-Cloud 组成。

目录

ElasticJob-Lite 框架源码学习

1. 3W1H(What、Where、Why、How)

1.1 What? (What is ElasticJob)

1.2 Where? (Where to use it?)

1.3Why?(Why use it?)

1.4 How?(How does it do?)

2.1环境版本

2.2 源码获取

3.1 编译打包

3.2 启动zookeeper

3.3 启动job

3.4 查看启动日志

4.1测试流程:

4.2日志分析

5.源码学习

5.1CoordinatorRegistryCenter-注册中心

5.2 ScheduleJobBootstrap-周期性调度作业启动类

-2.代理操作门面类

-4.设置作业配置

-5.初始化调度管理器

-6.初始化Lite job外观类

-7.初始化 ElasticJob 作业执行器

-8.设置分布式单次执行作业监听

-9.最后,创建任务调度控制器

5.3 执行schedule调度任务

 6.ElasticJob 的缺点


 

ElasticJob-Lite 是一个轻量级的无中心化解决方案,使用jar的形式提供分布式任务的协调服务;

ElasticJob-Cloud 使用Mesos 的解决方案,额外提供资源管理、应用分发以及进程隔离等服务。

ElasticJob 的各个产品使用统一的作业API,开发者仅需要一次开发,即可随意部署。

上面是官网对ElasticJob的一段介绍。

 

这里我们先只讨论 ElasticJob--Lite。由上可知,ElasticJob--Lite 是一个轻量级的、无中心化的、分布式调度解决方案。

“轻量级”:体现在它可以通过jar的心事对外提供分布式任务的协调服务;

“无中心”:即运行ElasticJob--Lite实例的各个服务器节点,各自处理各自的job,互不影响,各服务器节点间通过读写zk节点中的数据进行交互通信,既使得各作业服务器节点不受彼此影响,又可以保证多个进程或线程之间的交互。

“分布式调度”:这个当然就更好理解了,Leader服务器对作业进行分片后,各个作业服务器节点完成各自的作业分片,对使用者来看,整体完成整个作业。

 

1.2 Where? (Where to use it?)

“适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。”

1.3Why?(Why use it?)

这里来讨论下为什么用它。说到这里,就不得不提另一个强大的作业调度框架:Quartz。

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目。

“Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数以万计,数以万计的工作。任务定义为标准Java组件的作业,它们实际上可以执行您可以对其执行的任何编程操作。Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。”

除了以上这些优点完,最重要的是Quartz它是开源的,可以免费使用。这就很了不起了。

既然 Quartz如此强大吗,为何又出现了Elastic job呢?原因很简单,Quartz它不支持分布式,不能进行水平扩展,而ElasticJob的作者们就是看到了这个痛点,然后在Quartz的基础上,进行了二次封装,得到了了一个更加强大、支持分布式的Job scheduling框架,这就是Elastic Job。

ElasticJob-Lite 的优势在于无中心化设计且外部依赖少,适用于资源分配稳定的业务系统。

1.4 How?(How does it do?)

暂时先把这个问题放一放,待我们学习了Elasticjob-lite的原理之后,再来回答这个问题。

 

2.准备

2.1环境版本

Elasticjob源码版本:apache-shardingsphere-elasticjob-3.0.0-RC1-src。

运行环境:

zookeeper:ZooKeeper 3.6.0 及其以上版本,我这里使用的是3.6.2版本。

Jdk:java1.8。

Maven:3.6.1

 

2.2 源码获取

Elastic Job 官网地址:http://shardingsphere.apache.org/elasticjob/index_zh.html

首先,我们先从ElasticJob官网上拉取一套 ElasticJob-lite的源码。可以直接看官网源码,如果觉得官网下载的源码目录结构比较复杂,不好查看的话,我这里基于官网下载的源码,将源码中的部分核心的代码抽取出来,集成在一个工程里,对部分核心类做了注解,目录结构和内容做了少量调整,但是代码执行逻辑是与官方保持一致的,使用方式跟官网一致,有兴趣的同学,可以进行fork下载:https://github.com/insecthunter/open-source/tree/main/elastic-job

Elastic-job目录下有两个工程:1.elasticjob-lite:注解版源码工程;2.elasticjob-test:测试工程。

3.启动运行

3.1 编译打包

maven 打包编译,得到以下两个jar包:elasticjob-lite-1.0-SNAPSHOT.jar、elasticjob-test-1.0-SNAPSHOT.jar

elasticjob-test-1.0-SNAPSHOT.jar:测试job包;

elasticjob-lite-1.0-SNAPSHOT.jar:测试job工程运行的依赖Elastic job包;

3.2 启动zookeeper

elastic job依赖于zookeeper,所以先启动zookeeper:

./bin/zkServer.sh start

3.3 启动job

这里本地通过虚拟机进行测试。上传到虚拟机,启动执行。

在每台作业服务器上分别执行下面启动命令:

java -Xbootclasspath/a:elasticjob-lite-1.0-SNAPSHOT.jar: -jar elasticjob-test-1.0-SNAPSHOT.jar

也可以将日志输出到文件中,方便查看:

java -Xbootclasspath/a:register-center-1.0-SNAPSHOT.jar: -jar elasticjob-test-1.0-SNAPSHOT.jar >>192.168.56.122.log &

这里运行的job是一个简单的测试类,就是执行哪个分片的时候,打印对应的一句话,便于我们测试观察:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值