0. 引言
之前我們講解過主流的分布式定時任務(wù)框架xxl-job,隨著技術(shù)的迭代更新,更多的定時任務(wù)框架也開始出現(xiàn),今天我們來看一看新一代的定時任務(wù)框架PowerJob
1. PowerJob簡介
PowerJob是基于java開發(fā)的企業(yè)級的分布式任務(wù)調(diào)度平臺,與xxl-job一樣,基于web頁面實現(xiàn)任務(wù)調(diào)度配置與記錄,使用簡單,上手快速,因此迅速得到用戶的歡迎。
相對于其他定時任務(wù)框架具有無鎖化設(shè)計,更強悍的性能支撐,我們通過官網(wǎng)的產(chǎn)品對比可以了解詳情。
官網(wǎng)文檔:http://www.powerjob.tech/
定時任務(wù)類型
與傳統(tǒng)的定時任務(wù)框架對比,powerJob支持更多的定時任務(wù)類型:
-
API: 通過客戶端提供的api接口觸發(fā),服務(wù)端不會主動調(diào)度,適用于與業(yè)務(wù)服務(wù)上下連接或只調(diào)度一次的業(yè)務(wù)場景
-
CRON: 通過cron表達式調(diào)度,這是多數(shù)定時任務(wù)框架都支持的
-
固定頻率:每隔多少毫秒執(zhí)行一次。
-
固定延遲:延遲多少毫秒執(zhí)行一次
-
工作流:配合工作流進行調(diào)度,服務(wù)端不會主動調(diào)度,當(dāng)工作流節(jié)點執(zhí)行到該任務(wù)時運行。
2. PowerJob安裝
PowerJob支持兩種安裝方式,一是通過jar包運行,一是通過docker安裝
docker的安裝較為簡單,且官網(wǎng)有詳細說明,這里就不單獨講解了,大家可參考官方文檔:
PowerJob通過docker-compose安裝
我們講解通過jar形式運行的,
1、首先我們可以在github上下載源碼,可以自己編譯打包
https://github.com/PowerJob/PowerJob
可以在releases中下載指定版本,這里我們直接下載當(dāng)前最新版
2、在IDE中打開后,我們powerjob-server
就是我們要的服務(wù)端源碼,可以直接編譯,而powerjob-worker-samples
就是springboot下的使用示例
3、在運行編譯服務(wù)端之前,我們需要先創(chuàng)建數(shù)據(jù)庫,在指定的數(shù)據(jù)庫下創(chuàng)建即可
CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4
4、然后將powerjob-server/powerjob-server-starter
下的application-daily.properties
配置文件中的數(shù)據(jù)庫配置改成你服務(wù)器的
其中daily,pre,product 表示日常、預(yù)生產(chǎn)、生產(chǎn)環(huán)境下的配置,與我們常見的dev, test, prod類似,可以根據(jù)需要進行調(diào)整
其中還有郵箱及其他配置,如果有需要也可以調(diào)整,服務(wù)端的參數(shù)配置可參考官網(wǎng)文檔:
https://www.yuque.com/powerjob/guidence/bdvp1u
5、我們先來本地運行啟動類PowerJobServerApplication
一下試試,啟動成功后,訪問http://localhost:7700,出現(xiàn)登陸頁則說明運行成功
6、先注冊一個執(zhí)行器,注意這里的應(yīng)用名稱不能順便取,下文在客戶端的配置的app-name要與該名稱保持一致
7、然后用該執(zhí)行器名和密碼登錄
8、如下,我們就登錄成功了
9、如果需要發(fā)布到服務(wù)器或虛擬機上運行,可以進行編譯打包操作:
(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的健康檢查關(guān)閉
點擊如圖所示按鈕,并且看到test置灰,則表示關(guān)閉
(2)執(zhí)行mvn package
打包項目
10、在powerjob-server-starter
的target目錄下即可看到打包出來的jar,將其上傳到指定服務(wù)器,通過java -jar
指令即可運行
2. 定時任務(wù)創(chuàng)建
1、創(chuàng)建一個springboot項目,用于定時任務(wù)客戶端,引入客戶端依賴,如果是spring或其他java項目引入,可參考官網(wǎng)文檔: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: true
enable-test-mode: false
# 數(shù)據(jù)傳輸端口,默認27777
port: 27777
# 應(yīng)用名稱,與服務(wù)端創(chuàng)建的應(yīng)用賬號的名稱保持一致
app-name: powerjob-agent-test
# 服務(wù)端地址,多個用,隔開
server-address: 127.0.0.1:7700
# 通訊協(xié)議,4.3.0之后支持http和akka,4.3.0之前僅支持akka,官方推薦http
protocol: http
# 任務(wù)返回結(jié)果信息的最大長度,超過該值將被截斷
max-result-length: 4096
# 同時運行的輕量級任務(wù)數(shù)量上限
max-lightweight-task-num: 1024
# 同時運行的重量級任務(wù)數(shù)量上限
max-heavy-task-num: 64
3、啟動類上添加注解@EnableScheduling
4、通過申明BasicProcessor
接口,實現(xiàn)process
方法來書寫一個簡單的定時任務(wù)示例類,注意要聲明為bean
/**
* @author benjamin_5
* @Description 簡單任務(wù)執(zhí)行器
* @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("參數(shù): " + jobParams);
System.out.println("定時任務(wù)執(zhí)行");
return new ProcessResult(true, "定時任務(wù)執(zhí)行成功");
}
}
5、啟動客戶端項目,運行成功后,可以在服務(wù)端首頁看到機器實例
6、服務(wù)端任務(wù)管理
點擊新建任務(wù)
其中處理器配置是通過書寫處理器的全類路徑名來聲明的,比如我這里是com.example.powerjobdemo.job.SimpleJobServer
7、創(chuàng)建成功后,可以在列表看到新建的任務(wù)
8、打開客戶端控制臺,也能看到輸出的參數(shù)和執(zhí)行打印,說明任務(wù)執(zhí)行成功
9、同時我們可以在運行記錄
中看到執(zhí)行日志
至此,針對powerjob的最簡單使用就完成了,接下來我們繼續(xù)來看關(guān)于powjob的配置詳解
3. 任務(wù)配置參數(shù)詳解
創(chuàng)建任務(wù)時我們可以看到如下圖所示的配置:
- 定時信息:
主要選擇定時任務(wù)類型,支持API, CRON,固定頻率、固定延遲、工作流、每日固定間隔等幾種定時任務(wù)類型。
- 生命周期:
這是比其他任務(wù)框架更便捷的功能,指定了任務(wù)的生效周期,如果該任務(wù)是預(yù)定某時間段內(nèi)執(zhí)行的,可以通過該參數(shù)配置
- 執(zhí)行配置:
執(zhí)行類型支持單機執(zhí)行、廣播執(zhí)行、Map執(zhí)行、MapReduce執(zhí)行
單機執(zhí)行表示只需要有一個節(jié)點執(zhí)行任務(wù)即可的場景
廣播執(zhí)行表示需要全部節(jié)點一同執(zhí)行的場景,比如清除機器日志、各節(jié)點數(shù)據(jù)統(tǒng)計
Map與MapReduce執(zhí)行都是表示分布式、分批執(zhí)行,用來拆分計算量、耗時較大的任務(wù),區(qū)別在于Map執(zhí)行是一種簡單的數(shù)據(jù)處理邏輯,特點是將輸入數(shù)據(jù)拆分成多個子塊,并交給多個分布式節(jié)點同時執(zhí)行,以提高數(shù)據(jù)處理效率,適用于簡單的數(shù)據(jù)處理場景
MapReduce執(zhí)行是一種大數(shù)據(jù)處理框架,處理邏輯是將復(fù)雜的數(shù)據(jù)處理拆分成Map和Reduce階段進行處理,通過數(shù)據(jù)分組計算后合并來提供數(shù)據(jù)處理效率,更適合復(fù)雜的大數(shù)據(jù)場景
- 運行時配置:
支持HEALTH_FIRST和RANDOM,即第一個健康節(jié)點和隨機,用于選擇執(zhí)行處理器節(jié)點的策略。
最大實例數(shù)用于控制處理器節(jié)點數(shù)量,線程并發(fā)度用于控制并發(fā),運行時間限制
更多說明,可在官方文檔中查看:https://www.yuque.com/powerjob/guidence/ysug77文章來源:http://www.zghlxwxcb.cn/news/detail-432900.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-432900.html
到了這里,關(guān)于springcloud:新一代分布式定時任務(wù)框架——PowerJob的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!