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 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