java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...
本文適合有 Java 基礎(chǔ)知識(shí)的人群
作者:HelloGitHub-Salieri
引言
HelloGitHub 推出的《講解開源項(xiàng)目》[1]系列。
項(xiàng)目地址:
https://github.com/KFCFans/PowerJob
PowerJob 的設(shè)計(jì)目標(biāo)為企業(yè)級(jí)的分布式任務(wù)調(diào)度平臺(tái),即成為公司內(nèi)部的調(diào)度中間件。整個(gè)公司統(tǒng)一部署調(diào)度中心 powerjob-server,旗下所有業(yè)務(wù)線應(yīng)用只需要依賴 'powerjob-worker' 即可接入獲取任務(wù)調(diào)度與分布式計(jì)算能力。
因此,PowerJob 由調(diào)度服務(wù)器(powerjob-server)和執(zhí)行器(powerjob-worker)兩部分組成,powerjob-server 負(fù)責(zé)提供 Web 服務(wù)和完成任務(wù)的調(diào)度,powerjob-worker 則負(fù)責(zé)執(zhí)行用戶所編寫的任務(wù)代碼,同時(shí)提供分布式計(jì)算能力。
以下為在本地開發(fā)環(huán)境快速搭建并試用 PowerJob 的教程。
一、STEP1: 初始化項(xiàng)目
git clone https://github.com/KFCFans/PowerJob.git導(dǎo)入 IDE,源碼結(jié)構(gòu)如下,我們需要啟動(dòng)調(diào)度服務(wù)器(powerjob-server),同時(shí)在 samples 工程中編寫自己的處理器代碼
二、STEP2: 啟動(dòng)調(diào)度服務(wù)器
創(chuàng)建數(shù)據(jù)庫(不需要建表,只需要?jiǎng)?chuàng)建數(shù)據(jù)庫)powerjob-daily
修改配置文件,配置文件的說明官方文檔[2]寫的非常詳細(xì),此處不再贅述。由于是在本地 IDE 搭建測試環(huán)境,因此我們選擇使用開發(fā)環(huán)境的配置文件
application-daily.properties來修改并使用。需要修改的地方為數(shù)據(jù)庫配置:
spring.datasource.core.jdbc-urlspring.datasource.core.usernamespring.datasource.core.password- 當(dāng)然,有 mongoDB 的同學(xué)也可以修改
spring.data.mongodb.uri以獲取完全版體驗(yàn)。
完成配置文件的修改后,可以直接通過啟動(dòng)類 OhMyApplication 啟動(dòng)調(diào)度服務(wù)器,觀察啟動(dòng)日志,查看是否啟動(dòng)成功~啟動(dòng)成功后,訪問 http://127.0.0.1:7700/ ,如果能順利出現(xiàn) Web 界面,則說明調(diào)度服務(wù)器啟動(dòng)成功!
注冊(cè)應(yīng)用:點(diǎn)擊主頁應(yīng)用注冊(cè)按鈕,填入 powerjob-agent-test?和控制臺(tái)密碼(用于進(jìn)入控制臺(tái)),注冊(cè)示例應(yīng)用(當(dāng)然你也可以注冊(cè)其他的 appName,只是別忘記在示例程序中同步修改~)
三、STEP3: 編寫示例代碼
進(jìn)入示例工程(powerjob-worker-samples),修改配置文件連接 powerjob-server 并編寫自己的處理器代碼。
修改 powerjob-worker-samples 的啟動(dòng)配置類
OhMySchedulerConfig,將 ?appName修改為剛剛在控制臺(tái)注冊(cè)的名稱。編寫自己的處理器:在示例工程中新建一個(gè)類,繼承你想要使用的處理器(各個(gè)處理器的介紹可見官方文檔[2]),這里為了簡單演示,選擇使用單機(jī)處理器
BasicProcessor,以下代碼示例演示了在線日志功能的使用。@Slf4j@Componentpublic class StandaloneProcessorDemo implements BasicProcessor { @Override public ProcessResult process(TaskContext context) throws Exception { OmsLogger omsLogger = context.getOmsLogger(); omsLogger.info("start process,context is {}.", context); System.out.println("jobParams is " + context.getJobParams()); return new ProcessResult(true, "process successfully~"); }}啟動(dòng)示例程序,即直接運(yùn)行主類
SampleApplication,觀察控制臺(tái)輸出信息,判斷是否啟動(dòng)成功。
四、STEP4: 任務(wù)的配置與運(yùn)行
調(diào)度服務(wù)器與示例工程都啟動(dòng)完畢后,再次前往 Web 頁面( http://127.0.0.1:7700/ ),進(jìn)行任務(wù)的配置與運(yùn)行。
- 在首頁輸入框輸入配置的應(yīng)用名稱,成功操作后會(huì)正式進(jìn)入前端管理界面。
- 點(diǎn)擊任務(wù)管理 -> 新建任務(wù)(右上角),開始創(chuàng)建任務(wù)。
完成任務(wù)創(chuàng)建后,即可在控制臺(tái)看到剛才創(chuàng)建的任務(wù),如果覺得等待調(diào)度太過于漫長,可以直接點(diǎn)擊運(yùn)行按鈕,立即運(yùn)行本任務(wù)。
前往任務(wù)示例邊欄,查看任務(wù)的運(yùn)行狀態(tài)和在線日志
4.1 基本配置
- 任務(wù)名稱:名稱
- 任務(wù)描述:描述
- 任務(wù)參數(shù):任務(wù)處理時(shí)能夠獲取到的參數(shù)(即各個(gè) Processor的process 方法入?yún)?
TaskContext對(duì)象的 jobParams 屬性)(進(jìn)行一次處理器開發(fā)就能理解了) - 定時(shí)信息:該任務(wù)的觸發(fā)方式,由下拉框和輸入框組成
- API -> 不需要填寫任何參數(shù),表明該任務(wù)由 OpenAPI 觸發(fā)
- CRON -> 填寫 CRON 表達(dá)式(在線生成網(wǎng)站[3])
- 固定頻率 -> 填寫整數(shù),單位毫秒
- 固定延遲 -> 填寫整數(shù),單位毫秒
- 工作流 -> 不需要填寫任何參數(shù),表明該任務(wù)由工作流(workflow)觸發(fā)
4.2 執(zhí)行配置
由執(zhí)行類型(單機(jī)、廣播和 MapReduce)、處理器類型和處理器參數(shù)組成,后兩項(xiàng)相互關(guān)聯(lián)。
- 內(nèi)置 Java 處理器 -> 填寫該處理器的全限定類名(eg,
com.github.kfcfans.oms.processors.demo.MapReduceProcessorDemo) - Java(容器) -> 填寫容器ID#處理器全限定類名(eg,
18#com.github.kfcfans.oms.container.DemoProcessor) - SHELL -> 填寫需要處理的腳本(直接復(fù)制文件內(nèi)容)或腳本下載鏈接(http://xxx)
- PYTHON -> 填寫完整的 python 腳本或下載鏈接(http://xxx)
4.3 運(yùn)行配置
- 最大實(shí)例數(shù):該任務(wù)同時(shí)執(zhí)行的數(shù)量
- 單機(jī)線程并發(fā)數(shù):該實(shí)例執(zhí)行過程中每個(gè) Worker 使用的線程數(shù)量(MapReduce 任務(wù)生效,其余無論填什么,都只會(huì)使用必要的線程數(shù)...)
- 運(yùn)行時(shí)間限制:限定任務(wù)的最大運(yùn)行時(shí)間,超時(shí)則視為失敗,單位毫秒,0 代表不限制超時(shí)時(shí)間(不建議不限制超時(shí)時(shí)間)。
4.4 重試配置
- Instance 重試次數(shù):實(shí)例級(jí)別,失敗了整個(gè)任務(wù)實(shí)例重試,會(huì)更換 TaskTracker(本次任務(wù)實(shí)例的Master節(jié)點(diǎn)),代價(jià)較大,大型 Map/MapReduce 慎用。
- Task重試次數(shù):Task 級(jí)別,每個(gè)子 Task 失敗后單獨(dú)重試,會(huì)更換 ProcessorTracker(本次任務(wù)實(shí)際執(zhí)行的 Worker 節(jié)點(diǎn)),代價(jià)較小,推薦使用。
- 注:請(qǐng)注意同時(shí)配置任務(wù)重試次數(shù)和子任務(wù)重試次數(shù)之后的重試放大,比如對(duì)于單機(jī)任務(wù)來說,假如任務(wù)重試次數(shù)和子任務(wù)重試次數(shù)都配置了 1 且都執(zhí)行失敗,實(shí)際執(zhí)行次數(shù)會(huì)變成 4 次!推薦任務(wù)實(shí)例重試配置為 0,子任務(wù)重試次數(shù)根據(jù)實(shí)際情況配置。
4.5 機(jī)器配置
用來標(biāo)明允許執(zhí)行任務(wù)的機(jī)器狀態(tài),避開那些搖搖欲墜的機(jī)器,0 代表無任何限制。
- 最低 CPU 核心數(shù):填寫浮點(diǎn)數(shù),CPU 可用核心數(shù)小于該值的 Worker 將不會(huì)執(zhí)行該任務(wù)。
- 最低內(nèi)存(GB):填寫浮點(diǎn)數(shù),可用內(nèi)存小于該值的 Worker 將不會(huì)執(zhí)行該任務(wù)。
- 最低磁盤(GB):填寫浮點(diǎn)數(shù),可用磁盤空間小于該值的 Worker 將不會(huì)執(zhí)行該任務(wù)。
4.6 集群配置
- 執(zhí)行機(jī)器地址:指定集群中的某幾臺(tái)機(jī)器執(zhí)行任務(wù)(debug 的好幫手),多值英文逗號(hào)分割,如
192.168.1.1:27777,192.168.1.2:27777 - 最大執(zhí)行機(jī)器數(shù)量:限定調(diào)動(dòng)執(zhí)行的機(jī)器數(shù)量
4.7 報(bào)警配置
選擇任務(wù)執(zhí)行失敗后報(bào)警通知的對(duì)象,需要事先錄入。
基礎(chǔ)的教程到這里也就結(jié)束了~更多功能示例可見官方文檔[2],工作流、MapReduce、容器等高級(jí)特性等你來探索!
五、總結(jié)與預(yù)告
本章詳細(xì)介紹了 PowerJob 的快速入門,根據(jù)本文能夠快速搭建起本地開發(fā)/測試環(huán)境。下一章節(jié),我將會(huì)對(duì) PowerJob 整體的架構(gòu)做一個(gè)介紹,為后面的技術(shù)剖析做準(zhǔn)備。
那我們下期再見嘍~
作者游記
“常在河邊走,哪有不濕鞋”,然而,這句話在茶卡鹽湖卻屬于奢望。
稍有不慎,隱秘的鹽窟便對(duì)你敞開懷抱,瞬間將你吞噬~
鹽湖如此,人生亦是如此。
難免不幸時(shí),也要對(duì)著美好的明天微笑~
參考資料
[1]《講解開源項(xiàng)目》: https://github.com/HelloGitHub-Team/Article
[2]官方文檔: https://www.yuque.com/powerjob/guidence
[3]在線生成網(wǎng)站: https://cron.qqe2.com/
關(guān)注公眾號(hào)加入交流群(作者在 Java 群)
『講解開源項(xiàng)目系列』——讓對(duì)開源項(xiàng)目感興趣的人不再畏懼、讓開源項(xiàng)目的發(fā)起者不再孤單。跟著我們的文章,你會(huì)發(fā)現(xiàn)編程的樂趣、使用和發(fā)現(xiàn)參與開源項(xiàng)目如此簡單。歡迎聯(lián)系我(微信:xueweihan,備注:講解)加入我們,讓更多人愛上開源、貢獻(xiàn)開源~
獲取更多信息、“在看”讓本文被更多人看到、“贊賞”支持我們。
總結(jié)
以上是生活随笔為你收集整理的java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在哪里可以看到后备箱少女电影
- 下一篇: 求一个四个字qq网名。