當前位置: 妍妍網 > 碼農

計畫終於用上了PowerJob,真香!

2024-04-20碼農

來源:https://blog.csdn.net/qq_24950043/article/details/130175241

# 引言

之前我們講解過主流的分布式定時任務框架xxl-job,隨著技術的叠代更新,更多的定時任務框架也開始出現,今天我們來看一看新一代的定時任務框架PowerJob

# PowerJob簡介

PowerJob是基於java開發的企業級的分布式任務排程平台,與xxl-job一樣,基於web頁面實作任務排程配置與記錄,使用簡單,上手快速,因此迅速得到使用者的歡迎。

相對於其他定時任務框架具有無鎖化設計,更強悍的效能支撐,我們透過官網的產品對比可以了解詳情。

官網文件:http://www.powerjob.tech/

定時任務型別

與傳統的定時任務框架對比,powerJob支持更多的定時任務型別:

  • API: 透過客戶端提供的api介面觸發,伺服端不會主動排程,適用於與業務服務上下連線或只排程一次的業務場景

  • CRON: 透過cron運算式排程,這是多數定時任務框架都支持的

  • 固定頻率:每隔多少毫秒執行一次。

  • 固定延遲:延遲多少毫秒執行一次

  • 工作流:配合工作流進行排程,伺服端不會主動排程,當工作流節點執行到該任務時執行。

  • # PowerJob安裝

    PowerJob支持兩種安裝方式,一是透過jar包執行,一是透過docker安裝

    docker的安裝較為簡單,且官網有詳細說明,這裏就不單獨講解了,大家可參考官方文件:

    PowerJob透過docker-compose安裝

    我們講解透過jar形式執行的,

    1、首先我們可以在github上下載源碼,可以自己編譯打包

    https://github.com/PowerJob/PowerJob

    可以在releases中下載指定版本,這裏我們直接下載當前最新版

    2、在IDE中開啟後,我們powerjob-server就是我們要的伺服端源碼,可以直接編譯,而powerjob-worker-samples就是springboot下的使用範例

    3、在執行編譯伺服端之前,我們需要先建立資料庫,在指定的資料庫下建立即可

    CREATEDATABASEIFNOTEXISTS`powerjob-daily`DEFAULTCHARSET utf8mb4

    4、然後將powerjob-server/powerjob-server-starter下的application-daily.properties配置檔中的資料庫配置改成你伺服器的

    其中daily,pre,product 表示日常、預生產、生產環境下的配置,與我們常見的dev, test, prod類似,可以根據需要進行調整

    其中還有信箱及其他配置,如果有需要也可以調整,伺服端的參數配置可參考官網文件:

    https://www.yuque.com/powerjob/guidence/bdvp1u

    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>

    2、修改配置檔

    powerjob:worker:enabled: trueenable-test-mode: false # 數據傳輸埠,預設27777port: 27777 # 套用名稱,與伺服端建立的套用帳號的名稱保持一致app-name: powerjob-agent-test # 伺服端地址,多個用,隔開server-address: 127.0.0.1:7700 # 通訊協定,4.3.0之後支持http和akka,4.3.0之前僅支持akka,官方推薦httpprotocol: 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 */@Componentpublic classSimpleJobServerimplementsBasicProcessor{@Overridepublic ProcessResult process(TaskContext taskContext)throws Exception { String jobParams = taskContext.getJobParams(); System.out.println("參數: " + jobParams); System.out.println("定時任務執行");returnnew 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,即第一個健康節點和隨機,用於選擇執行處理器節點的策略。

    最大例項數用於控制處理器節點數量,執行緒並行度用於控制並行,執行時間限制

    更多說明,可在官方文件中檢視:https://www.yuque.com/powerjob/guidence/ysug77

    熱門推薦