千家信息网

Elastic Job 入门

发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,Elastic job是当当网架构师张亮,曹昊和江树建基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的弊端。Elastic job主要的功能
千家信息网最后更新 2024年10月02日Elastic Job 入门

Elastic job是当当网架构师张亮,曹昊和江树建基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的弊端。Elastic job主要的功能有支持弹性扩容,通过Zookepper集中管理和监控job,支持失效转移等,这些都是Quartz等其他定时任务无法比拟的。


目前Elastic job的最新版本已经由原来的elastic-job-core分离除了两个项目,分别为Elastic-Job-Lite和Elastic-Job-Cloud。Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成,Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。 Elastic-Job-Cloud使用Mesos + Docker(TBD)的解决方案,额外提供资源治理、应用分发以及进程隔离等服务,Elastic-Job-Lite和Elastic-Job-Cloud提供同一套API开发作业,开发者仅需一次开发,即可根据需要以Lite或Cloud的方式部署


开头copy 网上一段术语,讲解的很清晰。总结就是:elastic job 是用来实现 分布式的定时任务,比如说定时任务项目,部署在2台,但是只需要执行一次,而又想保持2台服务器代码都一致,这时候elasitc job 可以很完美的解决问题,当然使用的是zookeeper的相关特性。


1.实战

项目目录如下


1.pom.xml


新建maven项目,引入springboot的相关jar包

再引入elastic job 的相关核心包 elastic-job-core,elastic-job-spring



  4.0.0  com.xj  el  0.0.1-SNAPSHOT  jar  el  http://maven.apache.org      UTF-8           org.springframework.boot        spring-boot-starter-parent        1.4.0.RELEASE                junit      junit      3.8.1      test                     org.springframework.boot      spring-boot-starter-web                     com.dangdang   elastic-job-core   1.1.1             com.dangdang   elastic-job-spring   1.1.1                          org.springframework.boot        spring-boot-maven-plugin                  


2.reg.properties

存放zookeeper 配置中心的相关配置信息

serverLists=10.3.142.107:2181,10.3.142.107:2182,106.3.14.107:2183namespace=elastic-job-examplebaseSleepTimeMilliseconds=1000maxSleepTimeMilliseconds=3000maxRetries=3


3.withNamespace.xml

存放作业的相关详情,这里测试存放了 simple 与dataFlow 2中情况。

                                                       



elastic-job提供了三种类型的作业:Simple类型作业、Dataflow类型作业、Script类型作业。这里主要讲解前两者。Script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本,使用不多,可以参见github文档。

SimpleJob需要实现SimpleJob接口,意为简单实现,未经过任何封装,与quartz原生接口相似,比如示例代码中所使用的job。

Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。
可通过DataflowJobConfiguration配置是否流式处理。
流式处理数据只有fetchData方法的返回值为null或集合长度为空时,作业才停止抓取,否则作业将一直运行下去; 非流式处理数据则只会在每次作业执行过程中执行一次fetchData方法和processData方法,随即完成本次作业。
实际开发中,Dataflow类型的job还是很有好用的。



4.MySimpleJob.java

package com.xj.el;import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;import com.dangdang.ddframe.job.plugin.job.type.simple.AbstractSimpleElasticJob;public class MySimpleJob extends AbstractSimpleElasticJob{        @Override        public void process(JobExecutionMultipleShardingContext shardingContext) {                  System.out.println(String.format("------Thread ID: %s, 任务总片数: %s, 当前分片项: %s",                   Thread.currentThread().getId(), shardingContext.getShardingTotalCount(), shardingContext.getShardingItems()));          }       }


5.MyThroughputDataFlowElasticJob.java

package com.xj.el;import java.sql.Time;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;import com.dangdang.ddframe.job.internal.job.AbstractJobExecutionShardingContext;import com.dangdang.ddframe.job.plugin.job.type.dataflow.AbstractIndividualThroughputDataFlowElasticJob;public class MyThroughputDataFlowElasticJob extends AbstractIndividualThroughputDataFlowElasticJob{                        public List fetchData(JobExecutionMultipleShardingContext shardingContext) {                List testBeanList = new ArrayList();             //获取testBean的相关数据                return testBeanList;        }                public boolean processData(JobExecutionMultipleShardingContext shardingContext, TestBean data) {                //处理上文testBean的相关数据                return false;        }        }


6.springboot 测试主类 SpringBootSampleApplication.java

package com.xj.el;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.ImportResource;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * Hello world! * */@RestController@EnableAutoConfiguration@ImportResource(locations = {"classpath:withNamespace.xml"})public class SpringBootSampleApplication {         public static void main(String[] args) {                SpringApplication.run(SpringBootSampleApplication.class, args);            }                          @RequestMapping("/")    String home() {        return "Hello World!";    }}




作业 类型 任务 数据 处理 分布式 开发 接口 方法 项目 支持 方案 解决方案 服务 配置 两个 代码 意为 脚本 测试 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 sql语言中合并数据库 吴桥app软件开发 无棣软件开发入门教学哪里好 西安智慧食堂软件开发定制 电脑网络安全防范措施 项目软件开发中存在的问题 如何在r中分离数据库 网络安全分析响应 数据库查看以什么开头 智能化软件开发创新服务 电子商务软件开发的行业需求 酒店收银系统数据库异常 计算机网络技术一级好看吗 广州敏思网络技术有限公司电话 上海展厅互动软件开发公司 数据库 容器技术 青浦区专业软件开发技巧 查询mysql数据库被锁 附件数据库失败 艾泽拉斯数据库 我的世界挖泥土商店服务器推荐 深圳长江证券网络技术总监许旭彬 对记录集 更新到数据库 网络安全法 市场机会 自己搭建服务器老是被封 网络安全手抄报内容40字 苏州互联网软件开发都干啥 明咨网络技术有限公司怎么样 成都市大学生软件开发比赛 如何选中表格一列数据库
0