ZooKeeper分散式任務排程中心
一: 背景
軟體系統中,定時任務往往不可或缺,大家可能會採用Spring quartz 建立定時任務模組。 當任務模組進行了分散式部署,通常會出現定時任務重複執行的情況。 怎麼避免這種情況呢,是否可以構建一個任務註冊中心,Quartz負責註冊任務,但不具體執行任務內的業務邏輯。
任務註冊中心解決任務重複註冊的問題,同時將任務分配給若干處理器進行具體的業務處理,保證在同一個時間內,一個任務只會被一個處理器進行處理。如下圖
二:任務註冊中心與排程中心
採用ZooKeeper的客戶端框架Curator, 利用ZooKeeper的Master選舉機制實現。 註冊任務就相當於在ZooKeeper中建立或更新一個節點。通過更新節點的內容,來記錄任務的執行狀態。
三:程式碼模擬
軟體系統中,定時任務往往不可或缺,大家可能會採用Spring quartz 建立定時任務模組。 當任務模組進行了分散式部署,通常會出現定時任務重複執行的情況。 怎麼避免這種情況呢,是否可以構建一個任務註冊中心,Quartz負責註冊任務,但不具體執行任務內的業務邏輯。
任務註冊中心解決任務重複註冊的問題,同時將任務分配給若干處理器進行具體的業務處理,保證在同一個時間內,一個任務只會被一個處理器進行處理。如下圖
二:任務註冊中心與排程中心
採用ZooKeeper的客戶端框架Curator, 利用ZooKeeper的Master選舉機制實現。 註冊任務就相當於在ZooKeeper中建立或更新一個節點。通過更新節點的內容,來記錄任務的執行狀態。
三:程式碼模擬
點選(此處)摺疊或開啟
-
public class ZookeeperDemo5 {
-
-
private static String PATH = "/zkbk2";
-
private static String FINISH_FLAG="finish";
-
-
private static CuratorFramework client = CuratorFrameworkFactory.builder()
-
.connectString("10.243.3.18:2181,10.243.3.17:2181,10.243.3.27:2181").sessionTimeoutMs(5000)
-
.retryPolicy(new ExponentialBackoffRetry(100, 3)).build();
-
-
public static void main(String[] args) throws Exception {
-
client.start();
-
PathChildrenCache cache = new PathChildrenCache(client, PATH, true);
-
cache.start(StartMode.POST_INITIALIZED_EVENT);
-
-
cache.getListenable().addListener(new PathChildrenCacheListener() {
-
-
@Override
-
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) {
-
switch (event.getType()) {
-
case CHILD_ADDED:
-
System.out.println("CHILD_ADDED," + event.getData().getPath());
-
deal(event);
-
break;
-
case CHILD_UPDATED:
-
System.out.println("CHILD_UPDATED," + event.getData().getPath());
-
deal(event);
-
break;
-
case CHILD_REMOVED:
-
System.out.println("CHILD_REMOVED," + event.getData().getPath());
-
break;
-
default:
-
break;
-
}
-
}
-
});
-
-
Thread.sleep(Integer.MAX_VALUE);
-
}
-
-
-
-
-
private static void deal( PathChildrenCacheEvent event)
-
{
-
final LeaderLatch latch = new LeaderLatch(client, event.getData().getPath());
-
-
latch.addListener(new LeaderLatchListener() {
-
-
@Override
-
public void notLeader() {
-
}
-
-
@Override
-
public void isLeader() {
-
try {
-
System.out.println("======begin deal==========" + event.getData().getPath());
-
-
String data = new String(client.getData().forPath(event.getData().getPath()));
-
-
-
if (!data.contains("finish")) {
-
Thread.sleep(10000L);
-
System.out.println("");
-
System.out.println("");
-
System.out.println("**************************************");
-
System.out.println("**************************************");
-
System.out.println("**************************************");
-
System.out.println("**************************************");
-
System.out.println("");
-
System.out.println("");
-
client.setData().forPath(event.getData().getPath(), FINISH_FLAG.getBytes());
-
}
-
System.out.println("======finish deal==========" + event.getData().getPath());
-
latch.close();
-
}
-
catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
});
-
try {
-
latch.start();
-
}
-
catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2137933/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分散式任務排程分散式
- 分散式排程任務-ElasticJob分散式AST
- LTS分散式任務排程部署分散式
- Aloha:一個分散式任務排程框架分散式框架
- 中介軟體---分散式任務排程---Celery分散式
- 分散式系統架構之構建你的任務排程中心分散式架構
- micro-job分散式任務排程框架更新分散式框架
- 分散式任務排程平臺XXL-JOB分散式
- 新一代分散式任務排程框架分散式框架
- 分散式任務排程系統設計小結分散式
- Spring Boot Quartz 分散式叢集任務排程實現Spring Bootquartz分散式
- 開源分散式任務排程系統就選:DolphinScheduler分散式
- xxl-job,任務排程中心快速上手
- 分散式任務排程平臺XXL-JOB快速搭建教程分散式
- SpringBoot自定義starter開發分散式任務排程實踐Spring Boot分散式
- 任務排程
- 帶有分散式鎖的Go計劃任務排程器- DEV分散式Godev
- 整合了這個分散式任務排程平臺,真的很爽~~分散式
- 分散式任務排程內的 MySQL 分頁查詢最佳化分散式MySql
- Java 分散式任務排程平臺:PowerJob 快速開始+配置詳解Java分散式
- Easy Scheduler 1.0.2 釋出,分散式工作流任務排程系統分散式
- 基於任務排程的企業級分散式批處理方案分散式
- Airflow 任務排程AI
- Laravel 任務排程Laravel
- LiteOS-任務篇-原始碼分析-任務排程函式原始碼函式
- 淺談分散式任務排程系統Celery的設計與實現分散式
- 一個輕量級的分散式定時任務排程平臺-Cloudtask分散式Cloud
- SchedulerX 如何幫助使用者解決分散式任務排程難題?分散式
- Spring 指南(排程任務)Spring
- Spark中資源排程和任務排程Spark
- SpringBoot專案接入分散式任務排程平臺xxl-job(2.0.2)說明Spring Boot分散式
- 基於zookeeper的分散式配置中心(一)分散式
- Timer和TimerTask 任務排程
- 聊聊PowerJob的任務排程
- Linux 定時任務排程Linux
- LeetCode 621 任務排程器LeetCode
- 在spring boot中3分鐘上手分散式任務排程系統xxl-jobSpring Boot分散式
- laravel框架任務排程(定時執行任務)Laravel框架
- 基於zookeeper實現分散式配置中心(二)分散式