專案終於用上了 PowerJob,睡覺真香!

Java技术栈發表於2024-06-17

最近專案中使用了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_FIRSTRANDOM,即第一個健康節點和隨機,用於選擇執行處理器節點的策略。
  • 最大例項數用於控制處理器節點數量,執行緒併發度用於控制併發,執行時間限制

更多說明,可在官方文件中檢視。

版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。
本文連結:https://blog.csdn.net/qq_24950043/article/details/130175241

更多文章推薦:

1.Spring Boot 3.x 教程,太全了!

2.2,000+ 道 Java面試題及答案整理(2024最新版)

3.免費獲取 IDEA 啟用碼的 7 種方式(2024最新版)

覺得不錯,別忘了隨手點贊+轉發哦!

相關文章