介紹
powerjob提供了容器功能,用來做一些靈活的任務處理。這裡容器為 JVM 級容器,而不是作業系統級容器(Docker)。(至於為什麼取“容器”這個有歧義的名字是因為作者沒想出來更合適的稱呼,哈哈)
用途
- 有一些任務完全獨立於業務,程式碼量也不大,既不希望耦合於原業務程式碼,也不值得再搞一套新建專案->編譯->部署,或者說容器模板幫我們做了新建專案中的機械性工作,使我們可以在模板上直接書寫自己的程式碼,不必考慮專案配置,也大大簡化了部署。
- 可以讓Java程式設計師的開發有接近於shell指令碼開發一樣的方便體驗。
容器任務部署指南
生成容器模板
下載解壓模板,開發容器工程
下載後得到如下工程,可以在指定的package下開發程式碼
以下是新建類的示例程式碼,其他部分不需要任何改動
package org.example.demo;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
import tech.powerjob.worker.log.OmsLogger;
/**
* @author zhengqian
* @date 2022.05.10
*/
@Component
public class SimpleProcessor implements BasicProcessor {
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
// 線上日誌功能,可以直接在控制檯檢視任務日誌,非常便捷
OmsLogger omsLogger = taskContext.getOmsLogger();
omsLogger.info("SimpleProcessor start to process, current JobParams is {}.", taskContext.getJobParams());
// TaskContext為任務的上下文資訊,包含了在控制檯錄入的任務後設資料,常用欄位為
// jobParams(任務引數,在控制檯錄入),instanceParams(任務例項引數,通過 OpenAPI 觸發的任務例項才可能存在該引數)
String params = taskContext.getJobParams();
// 返回結果,該結果會被持久化到資料庫,在前端頁面直接檢視,極為方便
return new ProcessResult(true, "simple processor finished with params=" + params);
}
}
新建容器,打包上傳
在工程目錄下執行
mvn package
在工程的target目錄下會生成jar包,選擇 powerjob-processor-demo-1.0-SNAPSHOT-jar-with-dependencies.jar 上傳。
容器運維->新建容器,這裡選擇了FastJar方式,也可以選擇Git方式,提供git地址來建立容器。
容器部署
容器生成後點選部署
新建任務
容器部署完,就可以新建任務,執行指定容器的指定Processor類
執行,檢視結果
點選執行後,可以在檢視詳情和日誌
報錯排查
點選部署容器時沒有反應,檢視控制檯,出現以下報錯
原因是服務不支援wss連線,測試wss連線的方法
# install
npm install -g wscat
# wscat test
wscat -c 'wss://xxxxx.com/container/deploy/1'
# 返回
error: Unexpected server response: 404
解決方法:
配置server域名時新增wss協議支援,修改nginx配置(新增最後兩行):
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
官方文件
更多引數和解釋參見官方文件 https://www.yuque.com/powerjob/guidence/tetw6y