Elastic Job入門
阿新 • • 發佈:2019-01-08
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的方式部署
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
- </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.
- */
- publicclass MyElasticJob implements SimpleJob {
- publicvoid 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());
- }
- privatevoid 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>
看,簡單吧!