分佈式做業 Elastic-Job 快速上手指南,從理論到實戰一文搞定!

Elastic-Job支持 JAVA API 和 Spring 配置兩種方式配置任務,這裏咱們使用 JAVA API 的形式來建立一個簡單的任務入門,如今都是 Spring Boot 時代了,因此不建議使用 Spring 配置文件的形式。spring

Elastic-Job 須要依賴 Zookeeper 中間件,用於註冊和協調做業分佈式行爲的組件,目前僅支持 Zookeeper。咱們已經建立了 Zookeeper 集羣!數據庫

環境要求

一、Java 請使用 JDK 1.7 及其以上版本。apache

二、Zookeeper 請使用 Zookeeper 3.4.6 及其以上版本。服務器

三、Maven 請使用 Maven 3.0.4 及其以上版本。微信

引入maven依賴

<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-core</artifactId>
    <version>2.1.5</version>
</dependency>

這裏有一個坑,這個依賴裏面會包含有兩個不一樣版本的 curator-client,致使調用裏面方法的時候會找不到方法,因此須要單獨引入 curator-client 的依賴包。架構

<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-client</artifactId>
	<version>2.11.1</version>
</dependency>

建立做業

Elastic-Job 提供 Simple、Dataflow 和 Script 3種做業類型。框架

方法參數 shardingContext 包含做業配置、片和運行時信息。可經過 getShardingTotalCount(), getShardingItem() 等方法分別獲取分片總數,運行在本做業服務器的分片序列號等。maven

這裏咱們建立一個簡單(Simple)做業。分佈式

public class MyElasticJob implements SimpleJob {

	@Override
	public void execute(ShardingContext context) {
		switch (context.getShardingItem()) {
			case 0: {
				System.out.println("MyElasticJob - 0");
				break;
			}
			case 1: {
				System.out.println("MyElasticJob - 1");
				break;
			}
			case 2: {
				System.out.println("MyElasticJob - 2");
				break;
			}
			default: {
				System.out.println("MyElasticJob - default");
			}
		}
	}
}

上面的0-2涉及分佈式做業框架中分片的概念ide

任務的分佈式執行,須要將一個任務拆分爲多個獨立的任務項,而後由分佈式的服務器分別執行某一個或幾個分片項。

例如:有一個遍歷數據庫某張表的做業,現有2臺服務器。爲了快速的執行做業,那麼每臺服務器應執行做業的50%。爲知足此需求,可將做業分紅2片,每臺服務器執行1片。做業遍歷數據的邏輯應爲:服務器A遍歷ID以奇數結尾的數據;服務器B遍歷ID以偶數結尾的數據。若是分紅10片,則做業遍歷數據的邏輯應爲:每片分到的分片項應爲ID%10,而服務器A被分配到分片項0,1,2,3,4;服務器B被分配到分片項5,6,7,8,9,直接的結果就是服務器A遍歷ID以0-4結尾的數據;服務器B遍歷ID以5-9結尾的數據。

做業分片策略:http://elasticjob.io/docs/elastic-job-lite/02-guide/job-sharding-strategy/

配置做業

Elastic-Job 配置分爲3個層級,分別是 Core, Type 和 Root,每一個層級使用類似於裝飾者模式的方式裝配。

Core 對應 JobCoreConfiguration,用於提供做業核心配置信息,如:做業名稱、分片總數、CRON表達式等。

Type 對應 JobTypeConfiguration,有3個子類分別對應 SIMPLE, DATAFLOW 和 SCRIPT 類型做業,提供3種做業須要的不一樣配置,如:DATAFLOW 類型是否流式處理或 SCRIPT 類型的命令行等。

Root 對應 JobRootConfiguration,有2個子類分別對應 Lite 和 Cloud 部署類型,提供不一樣部署類型所需的配置,如:Lite類型的是否須要覆蓋本地配置或 Cloud 佔用 CPU 或 Memory 數量等。

在 Spring Boot 啓動類裏面加做業配置代碼。

private static CoordinatorRegistryCenter createRegistryCenter() {
    CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("192.168.10.31:2181,192.168.10.32:2181,192.168.10.33:2181", "elastic-job-demo"));
    regCenter.init();
    return regCenter;
}

private static LiteJobConfiguration createJobConfiguration() {
    // 定義做業核心配置
    JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("demoSimpleJob", "0/15 * * * * ?", 10).build();
    
    // 定義SIMPLE類型配置
    SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, MyElasticJob.class.getCanonicalName());
    
    // 定義Lite做業根配置
    LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
}

@Bean
public CommandLineRunner commandLineRunner() {
	return (String... args) -> {
		new JobScheduler(createRegistryCenter(), createJobConfiguration()).init();
	};
}

SimpleJobConfiguration 實現了JobTypeConfiguration接口。

LiteJobConfiguration 實現了JobRootConfiguration接口。

使用CommandLineRunner,能夠等 Spring Boot 啓動後再啓動 Elastic-Job 做業。

其餘的最基礎的 Spring Boot 的配置就不說了,不懂的能夠去公衆號菜單 Spring Boot 專題中學習。

更多做業的配置請參考官方文檔:http://elasticjob.io/docs/elastic-job-lite/02-guide/config-manual/

啓動做業

在工具裏面使用 maven 命令 spring-boot:run 啓動便可。

程序輸出:

MyElasticJob - 0
MyElasticJob - 1
MyElasticJob - 2
MyElasticJob - default
MyElasticJob - default
MyElasticJob - default
MyElasticJob - default
MyElasticJob - default
MyElasticJob - default
MyElasticJob - default

因爲是單個實例,全部 10 個分片都在一個實例輸出來了,如今咱們把它打成 jar 包,而後再用另一個端口啓動看下是否分片成功。

兩邊分別輸出:

MyElasticJob - 0
MyElasticJob - 1
MyElasticJob - 2
MyElasticJob - default
MyElasticJob - default

MyElasticJob - default
MyElasticJob - default
MyElasticJob - default
MyElasticJob - default
MyElasticJob - default

上面的輸出信息說明分片成功了,而後停掉一個項目後發現又自動觸發分片,全部的都在同一個輸出來了。

能夠看出分片功能真的很是實用,做業開發起來真的很方便,整個架構也很清晰,推薦你們使用。

後面還更多的 Elastic-Job 實戰乾貨請繼續關注,以爲有用就動手分享鼓勵一下咱們吧!

推薦:Spring Boot & Cloud 最強技術教程

掃描關注咱們的微信公衆號,乾貨天天更新。

image

相關文章
相關標籤/搜索