👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 每月贈書
新計畫: 仿小紅書 (微服務架構)正在更新中... , 全棧前後端分離部落格計畫 2.0 版本完結啦, 演示連結 : http://116.62.199.48/ 。全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了261小節,累計43w+字,講解圖:1806張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,
最近計畫中使用了PowerJob做任務排程模組,感覺這個框架真香,今天我們就來深入了解一下新一代的定時任務框架——PowerJob!
簡介
PowerJob是基於java開發的企業級的分布式任務排程平台,與xxl-job一樣,基於web頁面實作任務排程配置與記錄,使用簡單,上手快速,其主要功能特性如下:
使用簡單 :提供前端Web界面,允許開發者視覺化地完成排程任務的管理(增、刪、改、查)、任務執行狀態監控和執行日誌檢視等功能。
定時策略完善 :支持 CRON 運算式、固定頻率、固定延遲和API四種定時排程策略。
執行模式豐富 :支持單機、廣播、Map、MapReduce 四種執行模式,其中 Map/MapReduce 處理器能使開發者寥寥數行程式碼便獲得集群分布式計算的能力。
工作流支持 :支持線上配置任務依賴關系(DAG),以視覺化的方式對任務進行編排,同時還支持上下遊任務間的數據傳遞,以及多種節點型別(判斷節點 & 巢狀工作流節點)。
執行器支持廣泛 :支持 Spring Bean、內建/外接 Java 類,另外可以透過引入官方提供的依賴包,一鍵整合 Shell、Python、HTTP、SQL 等處理器,套用範圍廣。
運維便捷 :支持線上日誌功能,執行器產生的日誌可以在前端控制台頁面即時顯示,降低 debug 成本,極大地提高開發效率。
依賴精簡 :最小僅依賴關系型資料庫(MySQL/PostgreSQL/Oracle/MS SQLServer…)
高可用 & 高效能 :排程伺服器經過精心設計,一改其他排程框架基於資料庫鎖的策略,實作了無鎖化排程。部署多個排程伺服器可以同時實作高可用和效能的提升(支持無限的水平擴充套件)。
故障轉移與恢復 :任務執行失敗後,可根據配置的重試策略完成重試,只要執行器集群有足夠的計算節點,任務就能順利完成。
相對於其他定時任務框架具有無鎖化設計,更強悍的效能支撐,我們透過官網的產品對比可以了解詳情:
官網文件:http://www.powerjob.tech/
與傳統的定時任務框架對比,powerJob支持更多的定時任務型別:
API : 透過客戶端提供的api介面觸發,伺服端不會主動排程,適用於與業務服務上下連線或只排程一次的業務場景
CRON : 透過cron運算式排程,這是多數定時任務框架都支持的
固定頻率 :每隔多少毫秒執行一次。
固定延遲 :延遲多少毫秒執行一次
工作流 :配合工作流進行排程,伺服端不會主動排程,當工作流節點執行到該任務時執行。
安裝
PowerJob支持兩種安裝方式,一是透過jar包執行,一是透過docker安裝
docker的安裝較為簡單,且官網有詳細說明,這裏就不單獨講解了,大家可參考官方文件:
https://www.yuque.com/powerjob/guidence/docker-compose
如何透過jar形式執行的
1、首先我們可以在github上下載源碼,可以自己編譯打包
https://github.com/PowerJob/PowerJob
可以在releases中下載指定版本
2、在IDE中開啟後,我們
powerjob-server
就是我們要的伺服端源碼,可以直接編譯,而
powerjob-worker-samples
就是springboot下的使用範例
3、在執行編譯伺服端之前,我們需要先建立資料庫,在指定的資料庫下建立即可
CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4
4、然後將
powerjob-server/powerjob-server-starter
下的
application-daily.properties
配置檔中的資料庫配置改成你伺服器的
其中daily,pre,product 表示日常、預生產、生產環境下的配置,與我們常見的dev, test, prod類似,可以根據需要進行調整
其中還有信箱及其他配置,如果有需要也可以調整,伺服端的參數配置可參考官網文件。
5、我們先來本地執行啟動類PowerJobServerApplication一下試試,啟動成功後,存取http://localhost:7700,出現登陸頁則說明執行成功
6、先註冊一個執行器,註意這裏的套用名稱不能順便取,下文在客戶端的配置的app-name要與該名稱保持一致
7、然後用該執行器名和密碼登入
8、如下,我們就登入成功了
9、如果需要釋出到伺服器或虛擬機器上執行,可以進行編譯打包操作:
1)點選
mvn install
將依賴包打包到本地倉庫
註意,如果這裏報錯
Please refer to /Library/project/study/java/PowerJob-4.3.2/powerjob-server/powerjob-server-starter/target/surefire-reports for the individual test results.
那麽可以將maven的健康檢查關閉。
點選如圖所示按鈕,並且看到test置灰,則表示關閉
2)執行mvn package打包計畫
10、在
powerjob-server-starter
的target目錄下即可看到打包出來的jar,將其上傳到指定伺服器,透過
java -jar
指令即可執行
定時任務建立
1、建立一個springboot計畫,用於定時任務客戶端,引入客戶端依賴,如果是spring或其他java計畫引入,可參考官網文件:
https://www.yuque.com/powerjob/guidence/ygonln
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
<version>4.3.2</version>
</dependency>
推薦一個開源免費的 Spring Boot 實戰計畫:
https://github.com/javastacks/spring-boot-best-practice
2、修改配置檔
powerjob:
worker:
enabled: true
enable-test-mode: false
# 數據傳輸埠,預設27777
port: 27777
# 套用名稱,與伺服端建立的套用帳號的名稱保持一致
app-name: powerjob-agent-test
# 伺服端地址,多個用,隔開
server-address: 127.0.0.1:7700
# 通訊協定,4.3.0之後支持http和akka,4.3.0之前僅支持akka,官方推薦http
protocol: http
# 任務返回結果資訊的最大長度,超過該值將被截斷
max-result-length: 4096
# 同時執行的輕量級任務數量上限
max-lightweight-task-num: 1024
# 同時執行的重量級任務數量上限
max-heavy-task-num: 64
3、啟動類上添加註解@EnableScheduling
4、透過申明BasicProcessor介面,實作process方法來書寫一個簡單的定時任務範例類,註意要聲明為bean
/**
* @author benjamin_5
* @Description 簡單任務執行器
* @date 2023/5/3
*/
@Component
public class SimpleJobServer implements BasicProcessor {
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
String jobParams = taskContext.getJobParams();
System.out.println("參數: " + jobParams);
System.out.println("定時任務執行");
return new ProcessResult(true, "定時任務執行成功");
}
}
5、啟動客戶端計畫,執行成功後,可以在伺服端首頁看到機器例項
6、伺服端任務管理點選新建任務
其中處理器配置是透過書寫處理器的全類路徑名來聲明的,比如我這裏是
com.example.powerjobdemo.job.SimpleJobServer
7、建立成功後,可以在列表看到新建的任務
8、開啟客戶端控制台,也能看到輸出的參數和執行打印,說明任務執行成功
9、同時我們可以在執行記錄中看到執行日誌
至此,針對powerjob的最簡單使用就完成了,接下來我們繼續來看關於powjob的配置詳解。
任務配置參數詳解
建立任務時我們可以看到如下圖所示的配置:
定時資訊:
主要選擇定時任務型別,支持API, CRON,固定頻率、固定延遲、工作流、每日固定間隔等幾種定時任務型別。
生命周期:
這是比其他任務框架更便捷的功能,指定了任務的生效周期,如果該任務是預定某時間段內執行的,可以透過該參數配置
執行配置:
執行型別支持單機執行、廣播執行、Map執行、MapReduce執行
單機執行表示只需要有一個節點執行任務即可的場景
廣播執行表示需要全部節點一同執行的場景,比如清除機器日誌、各節點數據統計
Map與MapReduce執行都是表示分布式、分批執行,用來拆分計算量、耗時較大的任務,區別在於Map執行是一種簡單的數據處理邏輯,特點是將輸入數據拆分成多個子塊,並交給多個分布式節點同時執行,以提高數據處理效率,適用於簡單的數據處理場景
MapReduce執行是一種大數據處理框架,處理邏輯是將復雜的數據處理拆分成Map和Reduce階段進行處理,透過數據分組計算後合並來提供數據處理效率,更適合復雜的大數據場景
執行時配置:
支持
HEALTH_FIRST
和
RANDOM
,即第一個健康節點和隨機,用於選擇執行處理器節點的策略。
最大例項數用於控制處理器節點數量,執行緒並行度用於控制並行,執行時間限制
更多說明,可在官方文件中檢視。
👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 每月贈書
新計畫: 仿小紅書 (微服務架構)正在更新中... , 全棧前後端分離部落格計畫 2.0 版本完結啦, 演示連結 : http://116.62.199.48/ 。全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了261小節,累計43w+字,講解圖:1806張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,
1.
2.
3.
4.
最近面試BAT,整理一份面試資料【Java面試BATJ通關手冊】,覆蓋了Java核心技術、JVM、Java並行、SSM、微服務、資料庫、數據結構等等。
獲取方式:點「在看」,關註公眾號並回復 Java 領取,更多內容陸續奉上。
PS:因公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下「在看」,加個「星標」,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。
點「在看」支持小哈呀,謝謝啦