【PowerJob语雀转载】执行器(powerjob-worker)初始化

基于宿主应用的初始化

宿主应用即原有的业务应用,假如需要调度执行的任务与当前业务有较为紧密的联系,建议采取该方式。

SpringBoot 应用接入方式

⚠️:如果 SpringBoot 存在版本兼容性问题导致无法顺利初始化,可使用代码手动初始化JavaBean的方式:LINK

首先,添加相关的依赖,最新依赖版本请参考 maven 中央仓库:推荐地址 & 备用地址

xml 复制代码
<dependency>
    <groupId>tech.powerjob</groupId>
    <artifactId>powerjob-worker-spring-boot-starter</artifactId>
    <version>${latest.powerjob.version}</version>
</dependency>

随后,在 SpringBoot 配置文件(application.yml/properties)中添加相关的配置项。

ini 复制代码
# akka 工作端口,可选,默认 27777
powerjob.worker.akka-port=27777
# 接入应用名称,用于分组隔离,推荐填写 本 Java 项目名称
powerjob.worker.app-name=my-powerjob-worker
# 调度服务器地址,IP:Port 或 域名,多值逗号分隔
powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701
# 通讯协议,4.3.0 开始支持 HTTP 和 AKKA 两种协议,官方推荐使用 HTTP 协议(注意 server 和 worker 都要开放相应端口)
powerjob.worker.protocol=http
# 持久化方式,可选,默认 disk
powerjob.worker.store-strategy=disk
# 任务返回结果信息的最大长度,超过这个长度的信息会被截断,默认值 8192
powerjob.worker.max-result-length=4096
# 单个任务追加的工作流上下文最大长度,超过这个长度的会被直接丢弃,默认值 8192
powerjob.worker.max-appended-wf-context-length=4096
# 同时运行的轻量级任务数量上限
powerjob.worker.max-lightweight-task-num=1024
# 同时运行的重量级任务数量上限
powerjob.worker.max-heavy-task-num=64

最后,为了更好的观察 powerjob-worker 的运行情况,建议为 powerjob-worker 单独配置日志输出,详细教程见 日志单独配置

普通应用接入方式 (Spring 或 普通 Java 项目)

首先,添加相关的依赖,最新依赖版本请参考maven中央仓库:推荐地址 & 备用地址****

xml 复制代码
<dependency>
  <groupId>tech.powerjob</groupId>
  <artifactId>powerjob-worker</artifactId>
  <version>${latest.powerjob.version}</version>
</dependency>

随后,手动初始化 PowerJobWorker 对象。PowerJobWorker 对象的初始化依赖于配置类 PowerJobWorkerConfig,各参数说明如下表所示:

属性名称 含义 默认值
appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错
port Worker 工作端口 27777,不推荐修改
serverAddress 调度中心(powerjob-server)地址列表 无,必填项,否则启动报错
storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce 等会产生大量 Task 的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘)
protocol 与 server 的通讯协议 出于兼容性考虑仍未 AKKA,但建议手动改为 HTTP
maxResultLength 每个Task返回结果的默认长度,超长将被截断,过长可能导致网络拥塞 8096
userContext 用户自定义上下文对象,该值会被透传到 TaskContext#userContext 属性(可选参数) null
allowLazyConnectServer 是否允许延迟连接 server。启用后无需Server也能顺利启动PowerJobWorker,用于本地无 server 启动等场景 false
maxAppendedWfContextLength 单个任务向工作流上下文中追加数据的最大长度,超过这个长度会被直接丢弃 8192
maxLightweightTaskNum 同时运行的轻量级任务数量上限 1024
maxHeavyweightTaskNum 同时运行的重量级任务数量上限 64
healthReportInterval worker 健康状态上报的间隔(秒) 10
processorFactoryList 处理器工厂,允许自己定制处理器加载逻辑来支持丰富的扩展需求 null

最后,初始化客户端,完成执行器的启动,代码示例如下:

  • Spring 用户请使用 PowerJobSpringWorker

  • 非 Spring 用户请使用 PowerJobWorker

arduino 复制代码
@Configuration
public class PowerJobWorkerConfiguration {

    @Bean
    public PowerJobSpringWorker initPowerJobWorker() throws Exception {

        // 1. 创建配置文件
        PowerJobWorkerConfig config = new PowerJobWorkerConfig();
        config.setPort(28888);
        config.setAppName("my-java-application");
        config.setServerAddress(Lists.newArrayList("127.0.0.1:7700", "127.0.0.1:7701"));
        // 如果没有大型 Map/MapReduce 的需求,建议使用内存来加速计算
        config.setStoreStrategy(StoreStrategy.DISK);

        // 2. 创建 Worker 对象,设置配置文件(注意 Spring 用户需要使用 PowerJobSpringWorker,而不是 PowerJobWorker)
        PowerJobSpringWorker worker = new PowerJobSpringWorker(config);
        return worker;
    }
}

非 Spring 应用程序在创建 PowerJobWorker 对象后手动调用 powerJobWorker.init() 方法完成初始化即可。


日志单独配置

目前,powerjob-worker 并没有实现自己的 LogFactory(如果有需求的话请提 ISSUE,可以考虑实现),原因如下:

  1. powerjob-worker 的日志基于 Slf4J 输出,即采用了基于门面设计模式的日志框架,宿主应用无论如何都可以搭起 Slf4J 与实际的日志框架这座桥梁。

  2. 减轻了部分开发工作量,不再需要实现自己的 LogFactory。

为此,为了顺利且友好地输出日志,请在日志配置文件(logback.xml/log4j2.xml/...)中为 powerjob-worker 单独进行日志配置,比如(logback 示例):

xml 复制代码
<appender name="POWERJOB_WORKER_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/powerjob-worker.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${LOG_PATH}/powerjob-worker.%d{yyyy-MM-dd}.log</FileNamePattern>
        <MaxHistory>7</MaxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
    <append>true</append>
</appender>

<logger name="tech.powerjob" level="INFO" additivity="false">
    <appender-ref ref="POWERJOB_WORKER_APPENDER" />
</logger>

无论如何,powerjob-worker 启动时都会打印 Banner(如下所示),您可以通过 Banner 来判断日志配置是否成功。

复制代码
 ███████                                          ██          ██
░██░░░░██                                        ░██         ░██
░██   ░██  ██████  ███     ██  █████  ██████     ░██  ██████ ░██
░███████  ██░░░░██░░██  █ ░██ ██░░░██░░██░░█     ░██ ██░░░░██░██████
░██░░░░  ░██   ░██ ░██ ███░██░███████ ░██ ░      ░██░██   ░██░██░░░██
░██      ░██   ░██ ░████░████░██░░░░  ░██    ██  ░██░██   ░██░██  ░██
░██      ░░██████  ███░ ░░░██░░██████░███   ░░█████ ░░██████ ░██████
░░        ░░░░░░  ░░░    ░░░  ░░░░░░ ░░░     ░░░░░   ░░░░░░  ░░░░░

基于代理应用(powerjob-agent)的初始化

agent 是一个仅集成了官方处理器的执行器(其实就是为 worker 加了一个 main 方法),如果常见需求为脚本的调度执行,可以考虑直接部署 agent,简单快捷方便~

推荐直接使用 Docker 部署: powerjob-agent

与 server 一样,启动参数通过环境变量-e PARAMS传入,全部参数请见底部。

bash 复制代码
docker run -d 
-e PARAMS="--app powerjob-agent-test --server 192.168.1.1:7700,192.168.1.2:7700"
-p 27777:27777 --name powerjob-agent
-v ~/docker/powerjob-agent:/root powerjob/powerjob-agent:$version

或直接启动 agent 的jar包:java -jar powerjob-worker-agent-3.1.0.jar -a my-agent -s 127.0.0.1:7700

xml 复制代码
Usage: PowerJobAgent [-hV] -a=<appName> [-e=<storeStrategy>] [-l=<length>]
                     [-o=<protocol>] [-p=<port>] -s=<server> [-t=<tag>]
powerjob-worker agent
  -a, --app=<appName>     worker-agent's name
  -e, --persistence=<storeStrategy>
                          storage strategy, DISK or MEMORY
  -h, --help              Show this help message and exit.
  -l, --length=<length>   ProcessResult#msg max length
  -o, --protocol=<protocol>
                          transporter protocol, AKKA or HTTP
  -p, --port=<port>       transporter working port, not recommended to change
  -s, --server=<server>   oms-server's address, IP:Port OR domain
  -t, --tag=<tag>         worker-agent's tag
  -V, --version           Print version information and exit.
相关推荐
小坏讲微服务6 小时前
Spring Boot 4.0 整合 Kafka 企业级应用指南
java·spring boot·后端·kafka·linq
西门老铁6 小时前
解读 Casbin 之二:如何在 Spring项目中实现菜单权限
后端
CodeSheep6 小时前
这个知名编程软件,正式宣布停运了!
前端·后端·程序员
ZePingPingZe6 小时前
Spring Boot常见注解
java·spring boot·后端
SimonKing6 小时前
镜像拉不下来怎么办?境内Docker镜像状态在线监控来了
java·后端·程序员
a程序小傲6 小时前
华为Java面试被问:SQL执行顺序
java·后端·sql·华为·面试
码上成长6 小时前
长耗时接口异步改造总结
前端·git·后端
diudiu96286 小时前
Logback使用指南
java·开发语言·spring boot·后端·spring·logback
Lisonseekpan6 小时前
Elasticsearch 入门指南
大数据·分布式·后端·elasticsearch·搜索引擎
zhangyifang_0096 小时前
Spring中的BeanDefinition
java·后端·spring