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

介绍

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 //backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

官方文档

更多参数和解释参见官方文档 //www.yuque.com/powerjob/guidence/tetw6y

Tags: