日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式作业 Elastic-Job 快速上手指南

發(fā)布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式作业 Elastic-Job 快速上手指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自?分布式作業(yè) Elastic-Job 快速上手指南

Elastic-Job支持 JAVA API 和 Spring 配置兩種方式配置任務(wù),這里我們使用 JAVA API 的形式來創(chuàng)建一個簡單的任務(wù)入門,現(xiàn)在都是 Spring Boot 時代了,所以不建議使用 Spring 配置文件的形式。

Elastic-Job 需要依賴 Zookeeper 中間件,用于注冊和協(xié)調(diào)作業(yè)分布式行為的組件,目前僅支持 Zookeeper。我們已經(jīng)創(chuàng)建了 Zookeeper 集群!

環(huán)境要求

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

2、Zookeeper 請使用 Zookeeper 3.4.6 及其以上版本。

3、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,導(dǎo)致調(diào)用里面方法的時候會找不到方法,所以需要單獨引入 curator-client 的依賴包。

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

創(chuàng)建作業(yè)

Elastic-Job 提供 Simple、Dataflow 和 Script 3種作業(yè)類型。

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

這里我們創(chuàng)建一個簡單(Simple)作業(yè)。

public class MyElasticJob implements SimpleJob {@Overridepublic 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涉及分布式作業(yè)框架中分片的概念

任務(wù)的分布式執(zhí)行,需要將一個任務(wù)拆分為多個獨立的任務(wù)項,然后由分布式的服務(wù)器分別執(zhí)行某一個或幾個分片項。

例如:有一個遍歷數(shù)據(jù)庫某張表的作業(yè),現(xiàn)有2臺服務(wù)器。為了快速的執(zhí)行作業(yè),那么每臺服務(wù)器應(yīng)執(zhí)行作業(yè)的50%。為滿足此需求,可將作業(yè)分成2片,每臺服務(wù)器執(zhí)行1片。作業(yè)遍歷數(shù)據(jù)的邏輯應(yīng)為:服務(wù)器A遍歷ID以奇數(shù)結(jié)尾的數(shù)據(jù);服務(wù)器B遍歷ID以偶數(shù)結(jié)尾的數(shù)據(jù)。如果分成10片,則作業(yè)遍歷數(shù)據(jù)的邏輯應(yīng)為:每片分到的分片項應(yīng)為ID%10,而服務(wù)器A被分配到分片項0,1,2,3,4;服務(wù)器B被分配到分片項5,6,7,8,9,直接的結(jié)果就是服務(wù)器A遍歷ID以0-4結(jié)尾的數(shù)據(jù);服務(wù)器B遍歷ID以5-9結(jié)尾的數(shù)據(jù)。

作業(yè)分片策略:http://elasticjob.io/docs/elastic-job-lite/02-guide/job-sharding-strategy/

配置作業(yè)

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

Core 對應(yīng) JobCoreConfiguration,用于提供作業(yè)核心配置信息,如:作業(yè)名稱、分片總數(shù)、CRON表達式等。

Type 對應(yīng) JobTypeConfiguration,有3個子類分別對應(yīng) SIMPLE, DATAFLOW 和 SCRIPT 類型作業(yè),提供3種作業(yè)需要的不同配置,如:DATAFLOW 類型是否流式處理或 SCRIPT 類型的命令行等。

Root 對應(yīng) JobRootConfiguration,有2個子類分別對應(yīng) Lite 和 Cloud 部署類型,提供不同部署類型所需的配置,如:Lite類型的是否需要覆蓋本地配置或 Cloud 占用 CPU 或 Memory 數(shù)量等。

在 Spring Boot 啟動類里面加作業(yè)配置代碼。

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() {// 定義作業(yè)核心配置JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("demoSimpleJob", "0/15 * * * * ?", 10).build();// 定義SIMPLE類型配置SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, MyElasticJob.class.getCanonicalName());// 定義Lite作業(yè)根配置LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build(); }@Bean public CommandLineRunner commandLineRunner() {return (String... args) -> {new JobScheduler(createRegistryCenter(), createJobConfiguration()).init();}; }

SimpleJobConfiguration 實現(xiàn)了JobTypeConfiguration接口。

LiteJobConfiguration 實現(xiàn)了JobRootConfiguration接口。

使用CommandLineRunner,可以等 Spring Boot 啟動后再啟動 Elastic-Job 作業(yè)。

其他的最基礎(chǔ)的 Spring Boot 的配置就不說了,不懂的可以去公眾號菜單 Spring Boot 專題中學(xué)習(xí)。

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

啟動作業(yè)

在工具里面使用 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 個分片都在一個實例輸出來了,現(xiàn)在我們把它打成 jar 包,然后再用另外一個端口啟動看下是否分片成功。

兩邊分別輸出:

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

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

上面的輸出信息說明分片成功了,然后停掉一個項目后發(fā)現(xiàn)又自動觸發(fā)分片,所有的都在同一個輸出來了。

可以看出分片功能真的非常實用,作業(yè)開發(fā)起來真的很方便,整個架構(gòu)也很清晰,推薦大家使用。


總結(jié)

以上是生活随笔為你收集整理的分布式作业 Elastic-Job 快速上手指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。