当当开源任务调度(作业框架)elastic-job-1.1.1试用
安装zookeeper
http://zookeeper.apache.org/doc/r3.4.6/zookeeperStarted.html
windows下的zookeeper启动脚本(我用的是UBUNTU,未测试这个脚本)
来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html
setlocal
set ZOOCFGDIR=%~dp0%..\conf
set ZOO_LOG_DIR=%~dp0%..
set ZOO_LOG4J_PROP=INFO,CONSOLE
set CLASSPATH=%ZOOCFGDIR%
set CLASSPATH=%~dp0..\*;%~dp0..\lib\*;%CLASSPATH%
set CLASSPATH=%~dp0..\build\classes;%~dp0..\build\lib\*;%CLASSPATH%
set ZOOCFG=%ZOOCFGDIR%\zoo.cfg
set ZOOMAIN=org.apache.zookeeper.server.ZooKeeperServerMain
java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%"
-cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*
endlocal
添加Maven依赖(spring依赖什么的就不说了):
<!-- 引入elastic-job核心模块 -->
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-core</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 使用springframework自定义命名空间时引入 -->
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-spring</artifactId>
<version>1.1.1</version>
</dependency>
可能会出现构件找不到。如果你使用的是nexus本地maven仓库,可以登录web上去(例如http://192.168.1.250:8081/nexus/#view-repositories;central~browsestorage),删除对应的文件夹然后再尝试。
如果还是不行可以试试maven的-U参数 强制更新。
Spring配置文件方式注册作业:zookeeper的ip需要修改,命名空间dd-job会字典在zookeeper里创建。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:reg="http://www.dangdang.com/schema/ddframe/reg"
xmlns:job="http://www.dangdang.com/schema/ddframe/job"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.dangdang.com/schema/ddframe/reg
http://www.dangdang.com/schema/ddframe/reg/reg.xsd
http://www.dangdang.com/schema/ddframe/job
http://www.dangdang.com/schema/ddframe/job/job.xsd
">
<!--配置作业注册中心 -->
<reg:zookeeper id="regCenter" server-lists="192.168.1.251:2181" namespace="dd-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />
<!-- 配置作业-->
<job:simple id="myElasticJob" class="test.MyElasticJob" registry-center-ref="regCenter" cron="0/10 * * * * ?" sharding-total-count="3" sharding-item-parameters="0=A,1=B,2=C" />
</beans>
作业类test.MyElasticJob:
package test;
import java.util.List;
import java.util.Map;
import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;
import com.dangdang.ddframe.job.plugin.job.type.simple.AbstractSimpleElasticJob;
public class MyElasticJob extends AbstractSimpleElasticJob {
public MyElasticJob() {
System.out.println("MyElasticJob");
}
@Override
public void process(JobExecutionMultipleShardingContext context) {
System.out.println("context:"+context);
// String param=context.getJobParameter();
// Map<Integer, String> map=context.getShardingItemParameters();
// List<Integer> list=context.getShardingItems();
// String name=context.getJobName();
// Map<Integer, String> offset=context.getOffsets();
// System.out.println(System.currentTimeMillis()/1000+":"+param+",map:"+map+",list:"+list+",name:"+name+",offset:"+offset);
}
}
sping加载类:
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainBusinessProcess {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-bean.xml");
System.out.println(ctx);
}
}
java方法方式注册作业:zookeeper的ip需要修改,命名空间elastic-job-example会字典在zookeeper里创建。
package test;
import com.dangdang.ddframe.job.api.JobScheduler;
import com.dangdang.ddframe.job.api.config.impl.DataFlowJobConfiguration;
import com.dangdang.ddframe.job.api.config.impl.DataFlowJobConfiguration.DataFlowJobConfigurationBuilder;
import com.dangdang.ddframe.job.api.config.impl.SimpleJobConfiguration;
import com.dangdang.ddframe.job.api.config.impl.SimpleJobConfiguration.SimpleJobConfigurationBuilder;
import com.dangdang.ddframe.reg.base.CoordinatorRegistryCenter;
import com.dangdang.ddframe.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.reg.zookeeper.ZookeeperRegistryCenter;
public class JobRegDemo {
// 定义Zookeeper注册中心配置对象
private ZookeeperConfiguration zkConfig = new ZookeeperConfiguration("192.168.1.251:2181", "elastic-job-example", 1000, 3000, 3);
// 定义Zookeeper注册中心
private CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(zkConfig);
// 定义作业1配置对象
private SimpleJobConfigurationBuilder jobConfig1build = new SimpleJobConfiguration.SimpleJobConfigurationBuilder("simpleJobDemo", SimpleJobDemo.class, 10, "0/5 * * * * ?");
// 定义作业2配置对象
private DataFlowJobConfigurationBuilder jobConfig2build = new DataFlowJobConfiguration.DataFlowJobConfigurationBuilder("dataFlowElasticJobDemo", DataFlowElasticJobDemo.class, 10, "0/5 * * * * ?");
// 定义作业3配置对象
//private JobConfiguration jobConfig3build = new JobConfiguration("sequencePerpetualElasticDemoJob", SequencePerpetualElasticDemoJob.class, 10, "0/5 * * * * ?");
public static void main(final String[] args) {
new JobRegDemo().init();
}
private void init() {
// 连接注册中心
regCenter.init();
// 启动作业1
new JobScheduler(regCenter, jobConfig1build.build()).init();
// 启动作业2
new JobScheduler(regCenter, jobConfig2build.build()).init();
// 启动作业3
//new JobScheduler(regCenter, jobConfig3build.build()).init();
}
}
作业类test.DataFlowElasticJobDemo:
package test;
import java.util.List;
import java.util.concurrent.ExecutorService;
import com.dangdang.ddframe.job.api.DataFlowElasticJob;
import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;
import com.dangdang.ddframe.job.exception.JobException;
import com.dangdang.ddframe.job.internal.schedule.JobFacade;
public class DataFlowElasticJobDemo implements DataFlowElasticJob<String, JobExecutionMultipleShardingContext> {
@Override
public void execute() {
System.out.println("DataFlowElasticJobDemo");
}
@Override
public void handleJobExecutionException(JobException jobException) {
// TODO Auto-generated method stub
}
@Override
public JobFacade getJobFacade() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setJobFacade(JobFacade jobFacade) {
// TODO Auto-generated method stub
}
@Override
public List<String> fetchData(JobExecutionMultipleShardingContext shardingContext) {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateOffset(int item, String offset) {
// TODO Auto-generated method stub
}
@Override
public ExecutorService getExecutorService() {
// TODO Auto-generated method stub
return null;
}
}
作业类test.SimpleJobDemo:
package test;
import java.util.List;
import java.util.Map;
import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;
import com.dangdang.ddframe.job.plugin.job.type.simple.AbstractSimpleElasticJob;
public class SimpleJobDemo extends AbstractSimpleElasticJob {
public SimpleJobDemo() {
System.out.println("SimpleJobDemo");
}
@Override
public void process(JobExecutionMultipleShardingContext context) {
System.out.println("context:"+context);
}
}
两个main函数都可以运行,运行后作业会定时执行。
源码:https://github.com/dangdangdotcom/elastic-job
其中elastic-job-console是监控台,web界面的,可以用来监控和操作当前正在运行的作业。
maven打包后可以生成elastic-job-console-1.1.1.war。
放到tomcat可以直接访问http://localhost:8080/elastic-job-console-1.1.1
用户密码都是root
进入后,注册中心里连接zookeeper(需要输入ip端口和命名空间),即可查看之前两种方法运行的三个job。
注意有两个命名空间dd-job(1个作业)和elastic-job-example(2个作业)。
一台电脑看不出分片与否,因为都分到一个电脑上了。
一个以上就可以从context的shardingItems看出区别。一台电脑挂了分片会重新进行。这个开源的作业框架还是很好用的。
相关推荐
分布式任务调度框架Elastic-Job-Lite是当当网推出的一款轻量级无中心化任务调度解决方案,旨在解决大规模分布式环境下的任务调度问题。这款框架的设计理念是将任务的执行与调度分离,使得任务调度器无需关注具体的...
Elastic-Job Lite Console 2.1.5是一款由当当网开源的、用于分布式任务调度的管理后台程序,它主要依赖于Apache Zookeeper进行协调工作。这个版本的发布为开发者提供了更稳定、更高效的解决方案,帮助他们实现对复杂...
Elastic-Job是一个分布式任务调度框架,由两个独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。这里的"elastic-job-lite-console-2.1.5.zip"是一个压缩包,其中包含了Elastic-Job-Lite的控制台版本,支持在...
Elastic-Job是一个分布式任务调度框架,由两个子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite是轻量级的解决方案,它不依赖于任何云平台,适用于分布式环境中的任务调度。而Elastic-Job-Cloud则...
Elastic-Job Lite Console是当当网开源的一款用于分布式定时任务管理的控制台,版本为2.1.5。这个项目无需借助Tomcat等Web服务器,可以直接通过在解压后的bin目录下执行命令来启动服务,之后只需在浏览器中访问`...
elastic-job和ddframe关系见下图Elastic-Job 主要功能定时任务: 基于成熟的定时任务作业框架Quartz cron表达式执行定时任务。作业注册中心: 基于Zookeeper和其客户端Curator实现的全局作业注册控制中心。用于注册...
Elastic-Job Lite Console 是一个基于Elastic-Job框架开发的定时任务控制台,由当当网推出,旨在为企业级分布式系统提供简单易用、功能强大的定时任务管理工具。版本2.1.6-SNAPSHOT是该控制台的一个开发版本,它在前...
Elastic-Job-Lite是一款轻量级的分布式任务调度框架,由当当网开源,它提供了简单易用的API和可扩展的作业生态。在Elastic-Job-Lite中,"elastic-job-lite-console-master.zip"是一个包含Elastic-Job-Lite的可视化...
11_Elastic-Job框架介绍.mp4 12_初识Elastic-Job.mp4 13_急速入门Simple-1.mp4 14_急速入门Simple-2.mp4 15_急速入门dataflow.mp4 16_急速入门script.mp4 17_知识点检测与小结.mp4 18_Simple作业的3种整合方式介绍....
Elastic-Job-Lite是一款轻量级分布式任务调度框架,由当当网开源,它旨在解决海量任务在分布式环境下的调度问题。Elastic-Job-Lite的核心特性包括弹性扩展、故障转移、分布式调度以及简单易用的控制台管理界面。在本...
Elastic-Job是一个分布式任务调度框架,由两个子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite是轻量级的解决方案,适合在私有云或物理服务器集群上使用;而Elastic-Job-Cloud则基于Mesos框架,更...
当当elastic-job控制台jar包,elastic-job-lite-console-3.0.0.M1-SNAPSHOT,本人从git下载源码后编译生成的jar。 $ 解压 elastic-job-lite-console-3.0.0.M1-SNAPSHOT.rar $ cd elastic-job-lite-console-3.0.0.M1-...
Elastic-Job是一款分布式任务调度框架,由两个独立的模块组成:Elastic-Job-Lite和Elastic-Job-Cloud。这里我们主要关注Elastic-Job-Lite,它是一个轻量级的分布式作业调度框架,适用于微服务架构,提供简单易用的...
Elastic-Job是一个分布式任务调度框架,由两个独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。这个"elastic-job-quickstart.zip"压缩包应该是为初学者提供的一份快速入门示例代码,帮助理解并掌握Elastic-...
Elastic-Job,作为一款由当当网开源的分布式任务调度框架,因其易用性和高效性,被广泛应用于各大企业和项目中。本文将深入探讨Elastic-Job的核心特性和应用场景,帮助读者全面理解这一强大的工具。 1. **Elastic-...
Elastic-Job是由当当网开源的分布式任务调度框架,分为Elastic-Job-Lite和Elastic-Job-Cloud两个版本。Elastic-Job Lite是轻量级无中心化架构,适用于单机、集群等环境,而Elastic-Job-Cloud则是在Mesos上运行的...
Elastic-Job Lite是基于当当网开源的分布式任务调度框架,它旨在解决大规模分布式系统中的任务调度问题,提供了一套完整且易用的解决方案。在本文中,我们将深入探讨Elastic-Job Lite的核心特性、工作原理以及如何在...