分布式任務排程

2021-08-25 17:12:00 字數 2915 閱讀 3746

定時job,在什麼時間進行執行**任務。

public static void main(string args)  catch (exception e) }}

};thread thread = new thread(runnable);

thread.start();

}

public static void main(string args) 

};timer timer = new timer();

// 天數

long delay = 0;

// 秒數

long period = 1000;

timer.scheduleatfixedrate(timertask, delay, period);

}

public static void main(string args) 

};scheduledexecutorservice service = executors.newsinglethreadscheduledexecutor();

// 第二個引數為首次執行的延時時間,第三個引數為定時執行的間隔時間

service.scheduleatfixedrate(runnable, 1, 1, timeunit.seconds);

}

依賴:

org.quartz-scheduler

quartz

2.2.1

org.quartz-scheduler

quartz-jobs

2.2.1

任務:

public class jobtask implements job 

}

啟動類:

public static void main(string args) throws schedulerexception
雖然以上是可以實現任務排程,但是一般情況下這個應用是要部署在多個tomcat伺服器上的,那麼又怎麼保證冪等性(對於乙個job,不可能每台伺服器都讓他執行一次嘛,這不就重複執行了嗎)呢。

1、使用分布式鎖,保證只有一台伺服器在執行

2、新增配置檔案標識,兩台伺服器的配置檔案不同,根據配置檔案不同進行任務的排程,缺點是,那這就不支援集群 了。

3、資料庫唯一標識,比如根據某一字段為true標識可以執行,執行時改為false,執行完後再改為true,缺點是經常運算元據庫,效率低

4、使用分布式任務排程平台xxljob

總的來說傳統的任務排程有很多缺點:

1、沒有補償機制(比如某個任務排程失敗後,只能等待下次排程或者人工排程)

2、不支援集群

3、不支援路由策略

4、統計(每個服務或者專案都有自己的任務排程,肯定是要統計一些成功啊失敗什麼的,傳統排程的話只能自己管理自己的,可是這種任務排程的話最好是採用集中管理比較好)

5、管理平台(沒有提供乙個集中管理所有任務排程的平台)

6、報警郵箱(比如說重試n次以後,都不成功那就發瘋郵件吧)、狀態監控(執行、結束、等待)

而以上這些在分布式排程平台xxljob都有支援。

首先對於任何乙個客戶端的任務,需要註冊到xxl-job的admin平台,然後admin將任務分發到各個執行器去執行,這裡選擇每個執行器的原理類似負載均衡策略。

實戰演練一下:

2、使用開發工具eclipse或者idea匯入該專案

3、找到master/doc下的資料庫檔案匯入資料庫比如xx-job

4、修改配置檔案xxl-job-admin.properties中資料庫的鏈結位址和密碼,這裡如果有自己搭建郵箱伺服器也可填寫郵箱伺服器等資訊

5、將該專案部署到tomcat伺服器進行啟動,訪問輸入密碼使用者名稱(預設admin,123456)

6、在web頁面中新建執行器以及任務

7、根據他提供的一些例子比如spring boot的,匯入他的依賴以及配置檔案這些資訊到自己的專案中

8、填寫好admin部署的專案位址,這點很重要,指定執行器名稱、ip、埠、以及日誌檔案路徑

9、記住xxljobconfig這個配置檔案一定要匯入

10、新建乙個handler類似這樣

/**

* 任務handler的乙個demo(bean模式)

* * 開發步驟: 1、繼承 「ijobhandler」 ; 2、裝配到spring,例如加 「@service」 註解; 3、加 「@jobhander」

* 註解,註解value值為新增任務生成的jobkey的值;多個jobkey用逗號分割; 4、執行日誌:需要通過 "xxljoblogger.log"

* 列印執行日誌;

* * @author xuxueli 2015-12-19 19:43:36

*/@jobhander(value = "demojobhandler")//這個對應admin中的對應執行器中的任務的名稱

@service

public class demojobhandler extends ijobhandler ")

private string port;

@override

public returntexecute(string... params) throws exception

return returnt.success;

}}

啟動專案後即可。這個是乙個分布式job排程平台,可以試著啟動多個專案然後新增到同乙個執行器中執行,按照他的規則填好集群中的ip即可。

分布式排程系統 任務排程

這就是分布式任務排程所要解決的問題 舉個栗子 如何快速的做出大量的熱狗?如果將每乙個乙個熱狗按流程做的話,可見工作量會十分巨大而且效率低下 對任務按需求切分成多個子任務 再對所有的中間態結果進行reduce合併,得到最終結果 我們換個角度理解mapreduce操作 還會有一些廚師,按照一定的比例,將...

quartz的分布式任務排程

在實際的併發量較高的專案中,架構師通常會對伺服器進行集群或者對專案架構進行分布式部署 請允許筆者模擬乙個場景 某專案構架採用了nginx進行三颱應用型伺服器的負載均衡,並且每台伺服器部署同一套 這裡顯然要對quartz相應的進行集群 假設,該專案中存在乙個定時器模組 如果這裡不做特殊處理的話,三颱應...

Celery 分布式任務排程模組

celery基本模型 celery 參考中文文件連線 簡單實現 1 定義任務 定義celery物件,連線到redis 定義任務 def send sms to,datas,temp id pass或實現業務邏輯與worker共用 資料儲存 2 啟動 celery worker celery a ta...