`
bnmnba
  • 浏览: 286972 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

当当开源任务调度(作业框架)elastic-job-1.1.1试用

 
阅读更多

 

当当开源任务调度(作业框架)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是一款当当网开源的分布式任务调度demo,idea导入亲测可用

    当当网开源的分布式作业调度组件 Elastic-Job.zip

    elastic-job和ddframe关系见下图Elastic-Job 主要功能定时任务: 基于成熟的定时任务作业框架Quartz cron表达式执行定时任务。作业注册中心: 基于Zookeeper和其客户端Curator实现的全局作业注册控制中心。用于注册...

    elastic-job-console-1.1.1.war

    最新 当当开源系统elastic-job的控制台

    Java分布式Elastic-Job和Quartz定时任务课程(1.6G)

    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-console-3.0.0.M1-SNAPSHOT.rar

    当当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-lite-console-2.1.5.tar.gz

    elastic-job-lite-console-2.1.5.tar.gz elastic-job web console

    elastic-job,elastic-job-console

    elastic-job-console,elastic-job页面管理job控制台,希望可以帮到朋友们

    elastic-job-lite-console-2.1.5.zip[支持Windows/Os/Linux]

    elastic-job-lite-console-2.1.5.zip[支持Windows/Os/Linux]

    Elastic-Job分布式任务调度视频教程

    2、课程价值本着从解决生产实际问题出发,讲授分布式任务调度的实现方案,本课程采用当当网开源的Elastic-job任务调度产品作为技术方案,从Elastic-job的应用、原理、项目实战三方面进行讲解,通过学习本课程可以...

    elastic-job-lite-console.zip

    Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务;Job-Cloud采用...

    elastic-job-lite-console-2.1.4

    elastic-job-lite-console-2.1.4.tar.gz,可以在windows或者linux环境部署。控制台和Elastic Job并无直接关系,是通过读取Elastic Job的注册中心数据展现作业状态,或更新注册中心数据修改全局配置。

    分布式定时任务elastic-job 案例

    分布式定时任务elastic-job 。 自己写的一个例子, 项目小但是经过测试,已经包含所有的功能。 项目是maven项目,导入eclipse中 下载jar包, 运行里边的 main方法,即可运行。 部署在多台服务器时,需要zookeeper...

    elastic-job.pptx

    这个PPT通过查找网上资料,分为引言,其他分布式任务调度框架的痛点,为什么选择elastic-job这个框架,elastic-job框架的特点,elastic-job-lite和elastic-job-cloud这两个框架各有什么特点,代码以及如何进行环境...

    elastic-job-lite-console-master.zip

    elastic-job 的可视化管理界面,支持以下功能 查看作业以及服务器状态 快捷的修改以及删除作业设置 启用和禁用作业 跨注册中心查看作业 查看作业运行轨迹和运行状态

    elastic-job可以案例

    elastic-job elastic-job elastic-job elastic-job elastic-job elastic-job elastic-job

    elastic-job-lite-console-2.1.5.tar

    当当开源去中心化,任务调度Job管理后台Jar文件,主要依赖zookeeper

    elastic-job-lite-console-2.1.5

    当当开源系统elastic-job的控制台 无需tomcat部署 直接运行bin下命令即可运行 然后访问localhost:8989 登录的用户名密码都是root

    elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz

    elastic-job-lite-console 控制面板

Global site tag (gtag.js) - Google Analytics