Power Job 快速搭建 及通信机制介绍

快速开始(本地IDE版)

官方教程:https://www.yuque.com/powerjob/guidence/quick_start

PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的调度中间件。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 powerjob-worker 即可接入获取任务调度与分布式计算能力,通过不同的 appName 相互隔离。

因此,PowerJob 由调度服务器(powerjob-server,Power Job服务系统)和执行器(powerjob-worker,你的业务系统上的定时任务)两部分组成,powerjob-server 负责提供 Web 服务和完成任务的调度,powerjob-worker 则负责执行用户所编写的任务代码,同时提供分布式计算能力。

以下为在本地开发环境快速搭建并试用 PowerJob 的教程。

下载power job代码------运行调度服务------开发配置业务系统处理器及配置项------配置定时任务。

STEP1: 初始化项目

  1. 下载Power Job 程序代码,

    git clone https://github.com/PowerJob/PowerJob.git

    git clone https://gitcode.com/PowerStack/PowerJob.git

  2. 导入 IDE,源码结构如下,我们需要启动调度服务器(powerjob-server),同时在 samples 工程中编写自己的处理器代码

STEP2: 启动调度服务器

  1. 创建数据库(仅需要创建数据库 ):找到你的 DB,运行 SQL CREATE DATABASE IF NOT EXISTS powerjob-daily DEFAULT CHARSET utf8mb4,搞定~

  2. 修改配置文件,配置文件的说明官方文档写的非常详细,此处不再赘述。

    需要修改的地方(路径: PowerJob/powerjob-server/powerjob-server-starter/src/main/resources/application-daily.properties)为数据库配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password,当然,有 mongoDB 的同学也可以修改spring.data.mongodb.uri以获取完全版体验。

java 复制代码
#参考配置文件代码
oms.env=DAILY
logging.config=classpath:logback-dev.xml

#修改数据库相关配置
spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.core.jdbc-url=jdbc:mysql://127.0.0.1:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.core.username=root
spring.datasource.core.password=root
spring.datasource.core.maximum-pool-size=20
spring.datasource.core.minimum-idle=5

#修改数据库相关配置
oms.storage.dfs.mysql_series.driver=com.mysql.cj.jdbc.Driver
oms.storage.dfs.mysql_series.url=jdbc:mysql://127.0.0.1:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
oms.storage.dfs.mysql_series.username=root
oms.storage.dfs.mysql_series.password=root
oms.storage.dfs.mysql_series.auto_create_table=true

####### 邮件配置(不需要邮件报警可以删除以下配置来避免报错) #######
#spring.mail.host=smtp.163.com
#spring.mail.username=zqq@163.com
#spring.mail.password=GOFZPNARMVKCGONV
#spring.mail.properties.mail.smtp.auth=true
#spring.mail.properties.mail.smtp.starttls.enable=true
#spring.mail.properties.mail.smtp.starttls.required=true

####### 钉钉配置 (不需要的话删除以下配置来避免报错) #######
#oms.alarm.ding.app-key=dingauqwkvxxnqskknfv
#oms.alarm.ding.app-secret=XWrEPdAZMPgJeFtHuL0LH73LRj-74umF2_0BFcoXMfvnX0pCQvt0rpb1JOJU_HLl
#oms.alarm.ding.agent-id=847044348

####### Resource cleaning properties #######
oms.instanceinfo.retention=1
oms.container.retention.local=1
oms.container.retention.remote=-1

####### Cache properties #######
oms.instance.metadata.cache.size=1024

####### Threshold in precise fetching server(0~100). 100 means full detection of server, in which #######
####### split-brain could be avoided while performance overhead would increase. #######
oms.accurate.select.server.percentage = 50
  1. 完成配置文件的修改后,可以直接通过启动类 tech.powerjob.server.PowerJobServerApplication 启动调度服务器(注意:需要使用 daily 配置文件启动,可自行百度搜索"SpringBoot 指定配置文件启动"),观察启动日志,查看是否启动成功~启动成功后,访问 http://127.0.0.1:7700/ ,如果能顺利出现 Web 界面,则说明调度服务器启动成功!
  2. 注册应用
    ○ v4.x及前序版本:点击主页应用注册按钮,填入 powerjob-worker-samples 和控制台密码(用于进入控制台),注册示例应用(当然你也可以注册其他的 appName,只是别忘记在示例程序中同步修改~)

○ v5.x 版本:

■ 选择 PowerJob Account进行登录,简单起见可直接使用超级管理员登录(账号 ADMIN,密码 powerjob_admin)

登录后,进入应用管理TAB,点击右上角新增进行应用注册即可。

STEP3: 编写示例代码

进入示例工程(powerjob-worker-samples),修改配置文件连接powerjob-server并编写自己的处理器代码。

1.修改 powerjob-worker-samples 的 application.properties,将 powerjob.worker.app-name 改为刚刚在控制台注册的名称。

kotlin 复制代码
server.port=8081

spring.jpa.open-in-view=false

########### powerjob-worker 配置 ###########
# akka 工作端口,可选,默认 27777
powerjob.worker.akka-port=27777
# 接入应用名称,用于分组隔离,推荐填写 本 Java 项目名称
powerjob.worker.app-name=powerjob-worker-samples
# 调度服务器地址,IP:Port 或 域名,多值逗号分隔
powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701
# 持久化方式,可选,默认 disk
powerjob.worker.store-strategy=disk
# 任务返回结果信息的最大长度,超过这个长度的信息会被截断,默认 8192
powerjob.worker.max-result-length=4096
# 单个任务追加的工作流上下文最大长度,超过这个长度的会被直接丢弃,默认 8192
powerjob.worker.max-appended-wf-context-length=4096

2.编写自己的处理器:随便找个地方新建类,继承你想要使用的处理器(各个处理器的介绍可见官方文档,文档非常详细),这里为了简单演示,选择使用单机处理器 BasicProcessor,以下是代码示例。

java 复制代码
@Slf4j
@Component
//单击执行示例
public class StandaloneProcessorDemo implements BasicProcessor {

    @Override
    public ProcessResult process(TaskContext context) throws Exception {

        // PowerJob 在线日志功能,使用该 Logger 打印的日志可以直接在 PowerJob 控制台查看
        OmsLogger omsLogger = context.getOmsLogger();
        omsLogger.info("StandaloneProcessorDemo start process,context is {}.", context);
 
        return new ProcessResult(true, "process successfully~");
    }
}
  1. 启动示例程序,即直接运行主类 tech.powerjob.samples.SampleApplication,观察控制台输出信息,判断是否启动成功。

STEP4: 任务的配置与运行

调度服务器与示例工程都启动完毕后,再次前往Web页面( http://127.0.0.1:7700/ ),进行任务的配置与运行。

进入执行器应用的主界面

v4.x 及前序版本:在首页输入框输入配置的应用名称,成功操作后会正式进入前端管理界面

v5.x:在应用管理页面,选择对应的应用,点击右侧"进入"按钮即可。

进入注册应用首页后,出现如下图页面


新建任务

点击"任务管理" -> "新建任务"(右上角),开始创建任务。

可按下图说明填写参数


任务运行&运维

完成任务创建后,即可在控制台看到刚才创建的任务,如果觉得等待调度太过于漫长,可以直接点击运行按钮,立即运行本任务。

前往任务实例边栏,查看任务的运行状态和在线日志

基础的教程到这里也就结束了~

PowerJob Worker 与 Server 的通信机制

通信模式说明

1. 双向通信架构

  • Worker 主动连接 Server:Worker 启动时主动连接 Server
  • Server 控制 Worker:通过心跳机制实现任务调度和管理
  • 长连接维持:建立持久的通信通道

2. 配置验证

根据 [application.properties](file:///E:/java/PowerJob/powerjob-worker-samples/src/main/resources/application.properties) 中的配置:

  • powerjob.worker.server-address:Worker 需要知道 Server 地址
  • powerjob.worker.protocol:使用 HTTP 协议通信
  • powerjob.worker.allow-lazy-connect-server :当前设置为 false,强制验证连接

3. 通信流程

  • 初始化连接:Worker 启动时连接到 Server
  • 心跳机制:维持连接状态和任务状态同步
  • 任务执行:Server 通过连接下发任务指令
  • 结果回传:Worker 执行完成后将结果发送回 Server

4. 工作模式

  • Server 作为控制中心:负责任务分发和调度
  • Worker 作为执行节点:负责实际任务执行
  • 双向数据流:任务下发和结果回传同时存在

所以是 Worker 既接受 Server 调度,也主动与 Server 通信,形成完整的分布式任务调度体系。

PowerJob 执行方式区别

执行类型分类

1. 单机执行(Standalone)

  • 特点:任务在一个 Worker 节点上执行
  • 适用场景:简单任务、不需要分布式处理的任务
  • 优势:执行简单,资源消耗少

2. 广播执行(Broadcast)

  • 特点:任务被发送到所有可用的 Worker 节点同时执行
  • 适用场景:需要在所有节点执行相同操作的场景
  • 应用场景:系统通知、配置更新、缓存清理等

3. MapReduce 执行

  • 特点
    • Map 阶段:将任务分解到多个 Worker 并行处理
    • Reduce 阶段:汇总各节点处理结果
  • 适用场景:大数据处理、复杂计算任务
  • 优势:充分利用分布式计算能力,提高处理效率

通信机制

  • 所有执行类型都通过 powerjob.worker.server-address 配置的 Server 地址进行任务调度
  • Worker 通过 powerjob.worker.protocol 指定的协议与 Server 通信
  • 任务执行状态和结果通过心跳机制反馈给 Server
相关推荐
qq_2704900962 小时前
SpringBoot药品管理系统设计实现
java·spring boot·后端
、BeYourself3 小时前
SpringAI-ChatClient Fluent API 详解
java·后端·springai
星辰_mya3 小时前
reids哨兵集群与选主
java·开发语言
BD_Marathon3 小时前
SpringBoot快速入门
java·spring boot·后端
期待のcode3 小时前
Java的多态
java·开发语言
证能量少女4 小时前
2026大专Java开发工程师,考什么证加分?
java·开发语言
FPGAI4 小时前
Java学习之基础概念
java·学习
芒克芒克4 小时前
Java集合框架总结(面试八股)
java·开发语言·面试
ejjdhdjdjdjdjjsl4 小时前
C#文件流操作技巧
java·开发语言·spring