介紹 powerjob提供了容器功能,用來做一些靈活的任務處理。這裡容器為 JVM 級容器,而不是操作系統級容器(Docker)。(至於為什麼取“容器”這個有歧義的名字是因為作者沒想出來更合適的稱呼,哈哈) 用途 有一些任務完全獨立於業務,代碼量也不大,既不希望耦合於原業務代碼,也不值得再搞一套新建 ...
介紹
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