目录
1.1 What? (What is ElasticJob)
5.1CoordinatorRegistryCenter-注册中心
5.2 ScheduleJobBootstrap-周期性调度作业启动类
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 组成。
目录
1.1 What? (What is ElasticJob)
5.1CoordinatorRegistryCenter-注册中心
5.2 ScheduleJobBootstrap-周期性调度作业启动类
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
这里本地通过虚拟机进行测试。上传到虚拟机,启动执行。