快速开始(本地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: 初始化项目
下载Power Job 程序代码,
git clone https://github.com/PowerJob/PowerJob.git
git clone https://gitcode.com/PowerStack/PowerJob.git导入 IDE,源码结构如下,我们需要启动调度服务器(powerjob-server),同时在 samples 工程中编写自己的处理器代码
STEP2: 启动调度服务器
创建数据库(仅需要创建数据库):找到你的 DB,运行 SQL CREATE DATABASE IF NOT EXISTS
powerjob-dailyDEFAULT CHARSET utf8mb4,搞定~修改配置文件,配置文件的说明官方文档写的非常详细,此处不再赘述。
需要修改的地方(路径: 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以获取完全版体验。
#参考配置文件代码 oms.env=DAILY logging.config=classpath:logback-dev.xml #修改数据库相关配置 spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.core.jdbc-url=jdbc:mysql://127.0.0.1:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaispring.datasource.core.username=root spring.datasource.core.password=root spring.datasource.core.maximum-pool-size=20spring.datasource.core.minimum-idle=5#修改数据库相关配置 oms.storage.dfs.mysql_series.driver=com.mysql.cj.jdbc.Driveroms.storage.dfs.mysql_series.url=jdbc:mysql://127.0.0.1:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaioms.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#######Resourcecleaning properties ####### oms.instanceinfo.retention=1oms.container.retention.local=1oms.container.retention.remote=-1#######Cacheproperties ####### oms.instance.metadata.cache.size=1024#######Thresholdin precise fetchingserver(0~100).100means full detection of server,in which ####### ####### split-brain could be avoidedwhileperformance overhead would increase.####### oms.accurate.select.server.percentage=50- 完成配置文件的修改后,可以直接通过启动类 tech.powerjob.server.PowerJobServerApplication 启动调度服务器(注意:需要使用 daily 配置文件启动,可自行百度搜索“SpringBoot 指定配置文件启动”),观察启动日志,查看是否启动成功~启动成功后,访问 http://127.0.0.1:7700/ ,如果能顺利出现 Web 界面,则说明调度服务器启动成功!
- 注册应用
○ 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 改为刚刚在控制台注册的名称。
server.port=8081spring.jpa.open-in-view=false########### powerjob-worker 配置 ########### # akka 工作端口,可选,默认27777powerjob.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 # 任务返回结果信息的最大长度,超过这个长度的信息会被截断,默认8192powerjob.worker.max-result-length=4096# 单个任务追加的工作流上下文最大长度,超过这个长度的会被直接丢弃,默认8192powerjob.worker.max-appended-wf-context-length=40962.编写自己的处理器:随便找个地方新建类,继承你想要使用的处理器(各个处理器的介绍可见官方文档,文档非常详细),这里为了简单演示,选择使用单机处理器 BasicProcessor,以下是代码示例。
@Slf4j@Component//单击执行示例publicclassStandaloneProcessorDemoimplementsBasicProcessor{@OverridepublicProcessResultprocess(TaskContextcontext)throwsException{// PowerJob 在线日志功能,使用该 Logger 打印的日志可以直接在 PowerJob 控制台查看OmsLoggeromsLogger=context.getOmsLogger();omsLogger.info("StandaloneProcessorDemo start process,context is {}.",context);returnnewProcessResult(true,"process successfully~");}}- 启动示例程序,即直接运行主类 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