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的方式部署 .[转自官网:https://github.com/dangdangdotcom/elastic-job/blob/master/README_cn.md]

    1.实战

         maven依赖:          

[java] view plain copy

  1. <!-- 引入elastic-job-lite核心模块 -->  

  2. <!-- https://mvnrepository.com/artifact/com.dangdang/elastic-job-lite-core -->  

  3. <dependency>  

  4.     <groupId>com.dangdang</groupId>  

  5.     <artifactId>elastic-job-lite-core</artifactId>  

  6.     <version>2.0.0</version>  

  7. </dependency>  

  8. <!-- 使用springframework自定义命名空间时引入 -->  

  9. <dependency>  

  10.     <groupId>com.dangdang</groupId>  

  11.     <artifactId>elastic-job-lite-spring</artifactId>  

  12.     <version>2.0.0</version>  

  13. </dependency>  

 

      MyElasticJob.java       

[java] view plain copy

  1. package com.lance.job;  

  2.   

  3. import com.dangdang.ddframe.job.api.ShardingContext;  

  4. import com.dangdang.ddframe.job.api.simple.SimpleJob;  

  5.   

  6. /** 

  7.  * Created by zhangzh on 2017/2/15. 

  8.  */  

  9. public class MyElasticJob implements SimpleJob {  

  10.   

  11.   

  12.     public void execute(ShardingContext shardingContext) {  

  13.   

  14.         //1.当分片数为1时,在同一个zookepper和jobname情况下,多台机器部署了Elastic job时,只有拿到shardingContext.getShardingItem()为0的机器得以执行,其他的机器不执行  

  15.   

  16.         //2.当分片数大于1时,假如有3台服务器,分成10片,则分片项分配结果为服务器A=0,1,2;服务器B=3,4,5;服务器C=6,7,8,9。此时每台服务器可根据拿到的shardingItem值进行相应的处理,  

  17.          // 举例场景:  

  18.          // 假如job处理数据库中的数据业务,方法为:A服务器处理数据库中Id以0,1,2结尾的数据,B处理数据库中Id以3,4,5结尾的数据,C处理器处理6,7,8,9结尾的数据,合计处理0-9为全部数据  

  19.          // 如果服务器C崩溃,Elastic Job自动进行进行失效转移,将C服务器的分片转移到A和B服务器上,则分片项分配结果为服务器A=0,1,2,3,4;服务器B=5,6,7,8,9  

  20.               // 此时,A服务器处理数据库中Id以0,1,2,3,4结尾的数据,B处理数据库中Id以5,6,7,8,9结尾的数据,合计处理0-9为全部数据.  

  21.   

  22.   

  23.         processByEndId(shardingContext.getShardingItem());  

  24.     }  

  25.   

  26.     private void processByEndId(int shardingContext) {  

  27.   

  28.         // TODO: 2017/2/15  处理数据Id结尾为 shardingContext的数据  

  29.   

  30.     }  

  31. }  



       上下文配置:

      

[java] view plain copy

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <beans xmlns="http://www.springframework.org/schema/beans"  

  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  4.        xmlns:reg="http://www.dangdang.com/schema/ddframe/reg"  

  5.        xmlns:job="http://www.dangdang.com/schema/ddframe/job"  

  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans  

  7.                         http://www.springframework.org/schema/beans/spring-beans.xsd  

  8.                         http://www.dangdang.com/schema/ddframe/reg  

  9.                         http://www.dangdang.com/schema/ddframe/reg/reg.xsd  

  10.                         http://www.dangdang.com/schema/ddframe/job  

  11.                         http://www.dangdang.com/schema/ddframe/job/job.xsd  

  12.                         ">  

  13.     <!--Zookeeper注册中心 -->  

  14.     <reg:zookeeper id="regCenter" server-lists="zookeeperServerIp:2181" namespace="dd-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />  

  15.   

  16.     <!-- 配置作业-->  

  17.     <job:simple id="myElasticJob" class="com.lance.job.MyElasticJob" registry-center-ref="regCenter" cron="0 */5 * * * ?" sharding-total-count="1"/>  

  18. </beans>  

0?wx_fmt=gif


看,简单吧!


猜你喜欢

转载自blog.csdn.net/h8b6Pk7M7r8/article/details/79004693