天天看點

Easy Task —— 強大而簡單的分布式任務排程平台

簡單易用的分布式任務排程平台。來源于淘寶彩票排程平台,并先後在淘寶内容抓取平台和鐵甲二手機任務排程平台中使用。具有如下特點:

去中心化。

支援上百台不同業務的應用伺服器接入。任務在每個應用上獨立執行,充分利用應用本身資源。

故障轉移。應用如有多台執行機器,一台機器挂掉,其上的任務會切到其它機器。

管理控制台統一對任務修改、啟動、停止等。控制台挂掉不影響任務的執行。

可以線上檢視任務日志,實時了解任務執行情況。

下載下傳并啟動一個控制台。控制台同時也是worker,也能執行任務,預設會啟動一個内置的demoPlugin任務。

下載下傳并啟動

然後執行指令啟動: java -jar task-console.jar

2) 方式二:直接剪出task-console spring boot代碼子產品,導入IDE中,執行com.cehome.task.console.TaskConsoleApplication啟動。

如果你想快速部署一套簡單可用的排程系統,可以采用方式二,在task-console代碼裡面添加插件,并部署使用。

如果你有多個應用,想接入排程平台,采用方式一,部署的console隻做管理,不做任務執行。

點選“檢視日志”按鈕,可以看到任務執行日志(如果沒有,可以停10秒再重新整理一下)

點選“修改”檢視或修改任務配置。系統基于spring,Bean名稱“demoPlugin"就是内置的一個spring bean。

點選“停止”可以停止任務。

注:

1)控制台預設内置了一個H2資料庫(端口9092)來儲存任務配置。你也可以采用外部H2或mysql資料庫。

2)采用方式二剪出task-console代碼子產品,例子中的demoPlugin對應類為com.cehome.task.console.DemoPlugin,你可以直接修改此插件。

實際使用中,console隻是管理任務,不執行任務,任務是在用戶端應用中執行的。下面模拟app1和app2兩個應用接入排程平台。為了友善,還是用task-console.jar來模拟。執行前,先保證上面的console還在運作狀态。

啟動另一個指令行視窗,執行如下指令啟動app1(端口為8091)

java -jar task-console.jar --task.factory.appName=app1 --server.port=8091

-啟動另一個指令行視窗,執行如下指令啟動app2, (端口為8092)

java -jar task-console.jar --task.factory.appName=app2 --server.port=8092

觀察app2的指令行輸出視窗,發現demo已經轉移到在app2中執行了。

以 task-spring-boot-client-demo 子產品來說明spring boot應用如何接入排程平台。

增加依賴

加入@EnableTimeTaskClient注解

修改配置資訊application.properties

需求配置的資訊說明:

task.factory.appName - 應用名稱,不同應用應該不一樣。

task.factory.name - 叢集名稱,同時也是資料庫表名,定了以後不要随意改動。

task.datasource.* 配置資料庫資訊,支援H2和mysql資料庫,建議生産環境使用mysql資料庫。

task.log.path - logback任務日志輸出路徑。

task.log.packages - 任務執行類所在包名,記錄日志用。多個包名用半角分号隔開。如果不好确定,就用ROOT根日志。

開發任務插件

任務插件可以繼承com.cehome.task.client.TimeTaskPlugin,由于執行方法是run()是固定的,在console配置任務資訊時候就可以不指定方法名。stop()方法會在點選停止任務時候觸發,代碼應用停止任務執行和釋放必要的資源。

任務插件也可以是普通的spring bean,但在console配置任務資訊時候,需要指定要執行的方法。

啟動應用task-spring-boot-client-demo

“應用”選擇“boot-client-demo”;計劃時間填5s(5秒);Bean名稱跟上面開發插件一緻,填寫“bootDemoPlugin”;其它必填字段自己随意。

儲存并關閉,點選“啟動”,然後過10多秒鐘點選“檢視”日志,如果看到“task run……”日志,說明一切正常。

-

以 task-spring-mvc-client-demo 子產品來說明。

spring xml中導入bean:

在spring xml 中引入配置資訊spring/config.properties

在對應的spring/config.properties添加配置資訊:

在spring mvc xml配置遠端線上日志檢視的controller。 不配這個controller則console無法線上連接配接到應用檢視日志。

任務插件可以繼承com.cehome.task.client.TimeTaskPlugin,由于執行方法是run()是固定的,在console配置任務資訊時候就可以不配置。stop()方法會在點選停止任務時候觸發,代碼應用停止任務執行和釋放必要的資源。

在spring xml 加入插件的掃描路徑

啟動應用task-spring-mvc-client-demo

應用選擇“mvc-client-demo”;計劃時間填5s(5秒);Bean名稱跟上面開發插件一緻,填寫“mvcDemoPlugin”;其它必填字段自己随意。

預設的情況下,console會啟動一個内部的資料庫,生産環境建議用外部資料庫。還是以H2資料庫來說明:

啟動H2資料庫

java -cp h2*.jar org.h2.tools.Server -tcpPort 9092 -tcpAllowOthers -webPort 8082 -webAllowOthers

修改console或client資料庫配置資訊

如果是console,可以修改task.h2.start=false 表示禁用内部資料庫

獨立mysql資料庫

console 至少兩個node

若幹應用,每個應用至少保持兩個node