PowerJob高階特效-容器部署完整教程

風小雅發表於2022-05-11

介紹

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

相關文章