簡單易用的分布式任務排程平台。來源于淘寶彩票排程平台,并先後在淘寶内容抓取平台和鐵甲二手機任務排程平台中使用。具有如下特點:
去中心化。
支援上百台不同業務的應用伺服器接入。任務在每個應用上獨立執行,充分利用應用本身資源。
故障轉移。應用如有多台執行機器,一台機器挂掉,其上的任務會切到其它機器。
管理控制台統一對任務修改、啟動、停止等。控制台挂掉不影響任務的執行。
可以線上檢視任務日志,實時了解任務執行情況。
下載下傳并啟動一個控制台。控制台同時也是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