>PowerJob是一款国产开源的分布式任务调度与计算框架,它的核心定位是 "调度 + 计算" 

目录

一、项目启动

1.1 服务端启动

1.2 客户端启动

二、基础入门

2.1 BasicProcessor 

2.2 BroadcastProcessor

2.3 MapProcessor 

2.4 MapReduceProcessor 

三、高级调度

3.1 定时策略

3.2 工作流

3.3 容器处理器

四、进阶实现

4.1 OpenAPI

4.2 高可用


一、项目启动

1.1 服务端启动

官网文档:

​​​​​​PowerJob 简介 · 语雀

部署服务至少需要一个mysql数据库,用于存储项目的持久化数据,下面是github的数据库文件:

PowerJob/others/powerjob-mysql.sql at master · PowerJob/PowerJob · GitHub

项目的github地址:

PowerJob/PowerJob: Enterprise job scheduling middleware with distributed computing ability.

只需要修改下面的mysql的连接地址和用户密码即可,本地启动powerjob-server

powerjob-server的项目模块组成:

启动server之后,浏览器访问:http://127.0.0.1:7700/

默认的账号:ADMIN

默认的密码:powerjob_admin

与主流调度框架对比:

PowerJob运行时五部分组成:

1.2 客户端启动

我们以项目中的powerjob-worker-samples模块为例,照猫画虎即可

也可以直接引入中央仓库的依赖

<!-- powerjob-worker-spring-boot-starter -->
  <dependency>
      <groupId>tech.powerjob</groupId>
      <artifactId>powerjob-worker-spring-boot-starter</artifactId>
      <version>4.3.9</version>
  </dependency>

如果你对源码进行了修改,需要将starter上传到公司的私服上面

二、基础入门

2.1 BasicProcessor 

BasicProcessor 是一切处理器的基础,接口最简单,precess就是要执行的任务代码

代码实现:

控制台进入对应的应用,新建一个对应的任务

2.2 BroadcastProcessor

广播模式BroadcastProcessor 在每个 Worker 上各跑一次,适合配置下发、缓存清理、本地文件清理等场景

工作原理:

代码实现:

控制台任务配置:

2.3 MapProcessor 

MapProcessor 是 5.x 用于替代旧版 ShardingProcessor 的接口,允许在运行时根据业务数据动态派生子任务

代码实现:

控制台任务:

2.4 MapReduceProcessor 

MapReduceProcessor 是最强大的处理器,演示了"Root → Map → Reduce"三阶段

代码实现:

控制台任务配置:

四大处理器对比:

MapReduce处理器的三阶段:

三、高级调度

3.1 定时策略

 五种时间表达式类型:

分清固定频率和延迟:

注意:API 触发的任务定时字段无效,只能通过 PowerJobClient.runJob(id) 主动触发

3.2 工作流

工作流 vs 单任务

三个任务节点的代码实现:

控制台的三个任务节点的配置,这里展示节点1,其他两个类似

在工作流管理菜单,新建一个工作流,通过页面拖动对工作流进行搭建

同时可以配置,中间的某个节点如果失败,是否跳过失败节点

3.3 容器处理器

PowerJob 容器(OmsContainer)是 Worker 内部的"沙箱加载器",允许在不重启 Worker的情况下加载:  远端上传的 Java Jar 包 / 远端上传的 Python/Shell/CMD/PowerShell 脚本

核心价值:

  • 紧急修复任务不用发版,直接上传一个 jar 或脚本

  • 业务方可以独立提交自己的处理器,不污染主 Worker 包

  • 比如双十一大促,需要临时添加一个库存校验通知的任务,如果在worker中修改代码重新发版可以会出现某些问题,此时可以通过容器来热添加一个任务

容器 vs 内置

下面我就以临时添加一个价格检查的worker做使用展示

在模板生成这里获取maven项目

项目实现:

项目的processor代码添加完成后,将其打包成为一个jar上传到容器运维

控制台添加对应的任务:

四、进阶实现

4.1 OpenAPI

在worker中,我们可以通过IPowerJobClient内置的方法来实现对任务和实例的管理

IPowerJobClient的方法展示:

代码实现:

4.2 高可用

PowerJob Server 是无状态的(状态全在 DB),所以可以任意横向扩展

PowerJob Worker也是多部署节点,即可形成集群环境

关键配置:


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐