SpringBoot基礎教程3-1-5 Elastic-Job-lite快速整合

1 概述

Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分佈式任務的協調服務,外部依賴僅Zookeeper。

具體參考,http://elasticjob.io/docs/elastic-job-lite/00-overview/

2 核心理念

分佈式調度
  • Elastic-Job-Lite並無作業調度中心節點,而是基於部署作業框架的程序在到達相應時間點時各自觸發調度。
  • 註冊中心僅用於作業註冊和監控信息存儲。而主作業節點僅用於處理分片和清理等功能。
作業高可用
  • Elastic-Job-Lite提供最安全的方式執行作業。將分片總數設置為1,並使用多於1臺的服務器執行作業,作業將會以1主n從的方式執行。
  • 一旦執行作業的服務器崩潰,等待執行的服務器將會在下次作業啟動時替補執行。開啟失效轉移功能效果更好,可以保證在本次作業執行時崩潰,備機立即啟動替補執行。
最大限度利用資源
  • Elastic-Job-Lite也提供最靈活的方式,最大限度的提高執行作業的吞吐量。將分片項設置為大於服務器的數量,最好是大於服務器倍數的數量,作業將會合理的利用分佈式資源,動態的分配分片項。
  • 例如:3臺服務器,分成10片,則分片項分配結果為服務器A=0,1,2;服務器B=3,4,5;服務器C=6,7,8,9。 如果服務器C崩潰,則分片項分配結果為服務器A=0,1,2,3,4;服務器B=5,6,7,8,9。在不丟失分片項的情況下,最大限度的利用現有資源提高吞吐量。

3 添加依賴

<dependency> 
<groupid>com.dangdang/<groupid>
<artifactid>elastic-job-lite-core/<artifactid>
<version>2.1.5/<version>
/<dependency>
<dependency>
<groupid>com.dangdang/<groupid>
<artifactid>elastic-job-lite-spring/<artifactid>
<version>2.1.5/<version>/<dependency>

4 配置文件

# 數據源配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8&verifyServerCertificate=false&useSSL=false&requireSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456# zk配置
regCenter:
serverList: localhost:2181
namespace: elastic-job-lite-springboot
# 定時任務配置
simpleJob:
cron: 0/5 * * * * ?
shardingTotalCount: 3
shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou

5 註冊中心配置

@Configuration
@ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")
public class RegistryCenterConfig {
@Bean(initMethod = "init")
public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList,
@Value("${regCenter.namespace}") final String namespace) { return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
}
}

6 事件追蹤源配置

@Configuration
public class JobEventConfig {
@Resource
private DataSource dataSource;
@Bean
public JobEventConfiguration jobEventConfiguration() { return new JobEventRdbConfiguration(dataSource);
}
}

7 任務配置

@Configuration
public class SimpleJobConfig {
@Resource
private ZookeeperRegistryCenter regCenter;
@Resource
private JobEventConfiguration jobEventConfiguration;
@Bean
public SimpleJob simpleJob() { return new SpringSimpleJob();
}
@Bean(initMethod = "init")
public JobScheduler simpleJobScheduler(final SimpleJob simpleJob,
@Value("${simpleJob.cron}") final String cron,
@Value("${simpleJob.shardingTotalCount}") final int shardingTotalCount,
@Value("${simpleJob.shardingItemParameters}") final String shardingItemParameters) { return new SpringJobScheduler(simpleJob, regCenter,
getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters)
, jobEventConfiguration);
}

private LiteJobConfiguration getLiteJobConfiguration(final Class extends SimpleJob> jobClass,
final String cron, final int shardingTotalCount,
final String shardingItemParameters) { return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(
jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(),
jobClass.getCanonicalName()))
.overwrite(true).build();
}
}

省略實體代碼,請參考源碼

8 測試結果

8.1 啟動zk

  • 官網下載,zookeeper,解壓,啟動腳本/zookeeper-XX/bin/zkServer.sh
SpringBoot基礎教程3-1-5 Elastic-Job-lite快速整合


8.2 啟動工程

SpringBoot基礎教程3-1-5 Elastic-Job-lite快速整合

9 工程目錄

SpringBoot基礎教程3-1-5 Elastic-Job-lite快速整合

10 結束語

Elastic-Job-Lite與XXL job最大的區別是,沒有調度中心,更加輕量化,但是要依賴zk,讀者可以根據自己項目需求選擇,本文https://github.com/Mkeeper6/SpringBoot-About。


分享到:


相關文章: