Elastic Job 入门详解

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

大家好,又见面了,我是你们的朋友全栈君。

    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依赖:          

<!-- 引入elastic-job-lite核心模块 -->
<!-- https://mvnrepository.com/artifact/com.dangdang/elastic-job-lite-core -->
<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-core</artifactId>
    <version>2.0.0</version>
</dependency>
<!-- 使用springframework自定义命名空间时引入 -->
<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-spring</artifactId>
    <version>2.0.0</version>
</dependency>

 

      MyElasticJob.java       

package com.lance.job;

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

/**
 * Created by zhangzh on 2017/2/15.
 */
public class MyElasticJob implements SimpleJob {


    public void execute(ShardingContext shardingContext) {

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

        //2.当分片数大于1时,假如有3台服务器,分成10片,则分片项分配结果为服务器A=0,1,2;服务器B=3,4,5;服务器C=6,7,8,9。此时每台服务器可根据拿到的shardingItem值进行相应的处理,
         // 举例场景:
         // 假如job处理数据库中的数据业务,方法为:A服务器处理数据库中Id以0,1,2结尾的数据,B处理数据库中Id以3,4,5结尾的数据,C处理器处理6,7,8,9结尾的数据,合计处理0-9为全部数据
         // 如果服务器C崩溃,Elastic Job自动进行进行失效转移,将C服务器的分片转移到A和B服务器上,则分片项分配结果为服务器A=0,1,2,3,4;服务器B=5,6,7,8,9
              // 此时,A服务器处理数据库中Id以0,1,2,3,4结尾的数据,B处理数据库中Id以5,6,7,8,9结尾的数据,合计处理0-9为全部数据.


        processByEndId(shardingContext.getShardingItem());
    }

    private void processByEndId(int shardingContext) {

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

    }
}


       上下文配置:

      

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
                        ">
    <!--Zookeeper注册中心 -->
    <reg:zookeeper id="regCenter" server-lists="zookeeperServerIp:2181" namespace="dd-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />

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


看,简单吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149569.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 主机支持远程唤醒_Linux远程开机

    linux 主机支持远程唤醒_Linux远程开机一,什么情况下需要远程开机?如果我们的服务器没有部署在本地(实际上通常都是这样的,我们会把服务器托管到IDC机房),而且服务器在机房中不止一台,其中一台被关闭时,则我们可以远程连接一台没有关机的服务器上,然后进行远程开机.二,远程开机需要的软件它需要wakeonlan这个软件,从何处得到它?它的官方站是:http://sourceforge.net/projects/wake-on-lan/如果使…

    2022年5月5日
    100
  • ODS层设计规范_环境类别二类的保护层厚度是多少

    ODS层设计规范_环境类别二类的保护层厚度是多少ODS层设计规范更新时间:2021-06-0814:37我的收藏本页目录数据同步及处理规范 命名规范 数据存储及生命周期管理规范 数据质量规范本文为您介绍ODS层设计规范。数据同步及处理规范数据同步方式的选择 基本规范通过需求形式落地到DataWorks的数据集成,规范落地情况依赖工具的推进节奏。一个系统的源表只允许同步一次到MaxCompute。 数据加载与处理 通过一键实时同步至MaxCompute方案实现,请参见配置查看数据同步任务。 命名规范表命名

    2022年10月6日
    2
  • cameralink转hdmi_输入电阻和输出电阻

    cameralink转hdmi_输入电阻和输出电阻FMC202是北京青翼科技的一款基于FMC接口标准的1路CameraLinkFull模式(或者2路CameraLinkBase模式)采集、1路HDMI(DVI)视频输出的子卡模块,该模块具有2个CameraLink端口(SDR,26PIN),可通过硬件配置成1路Full输入或者2路Base模式输入,CameraLink接口支持80BitDeca模式(即FullPlus模式)。该模块支持1

    2022年9月28日
    2
  • [leetcode] Combination Sum and Combination SumII

    [leetcode] Combination Sum and Combination SumII

    2022年1月11日
    44
  • 探索Android中的Parcel机制(上)

    探索Android中的Parcel机制(上)

    2021年12月10日
    49
  • 菜鸟也疯狂,易语言自绘控件__进度条、滑块条[通俗易懂]

    菜鸟也疯狂,易语言自绘控件__进度条、滑块条[通俗易懂]进度条的自绘,关键的是用GetWindowLong得到一个进度条的结构:.版本2.数据类型进度条结构   .成员hWnd,整数型,,,进度条窗口句柄   .成员dwStyle,整数型,,,进度条窗口样式   .成员iMin,整数型,,,最小最大进度   .成员iMax,整数型,,,当前进度值

    2022年7月13日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号