powerjob 简介
PowerJob
全新一代分布式任务调度与计算框架
主要特性
使用简单:提供前端 Web 界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。
定时策略完善:支持 CRON 表达式、固定频率、固定延迟和 API 四种定时调度策略。
执行模式丰富:支持单机、广播、Map、MapReduce 四种执行模式,其中 Map/MapReduce 处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。
DAG 工作流支持:支持在线配置任务依赖关系,可视化得对任务进行编排,同时还支持上下游任务间的数据传递
执行器支持广泛:支持 Spring Bean、内置 / 外置 Java 类、Shell、Python 等处理器,应用范围广。
运维便捷:支持在线日志功能,执行器产生的日志可以在前端控制台页面实时显示,降低 debug 成本,极大地提高开发效率。
依赖精简:最小仅依赖关系型数据库(MySQL/Oracle/MS SQLServer...),扩展依赖为 MongoDB(用于存储庞大的在线日志)。
高可用 & 高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。
故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。
powerjob 解决什么问题?
有定时执行需求的业务场景:如每天凌晨全量同步数据、生成业务报表等。
有需要全部机器一同执行的业务场景:如使用广播执行模式清理集群日志。
有需要分布式处理的业务场景:比如需要更新一大批数据,单机执行耗时非常长,可以使用 Map/MapReduce 处理器完成任务的分发,调动整个集群加速计算。
有需要延迟执行某些任务的业务场景:比如订单过期处理等。
PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的任务调度中间件。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 powerjob-worker 即可接入调度中心获取任务调度与分布式计算能力。

集成步骤
先下载他的demo 运行一下看看效果
STEP1: 初始化项目
- git clone https://github.com/PowerJob/PowerJob.git
- 导入 IDE,源码结构如下,我们需要启动调度服务器(powerjob-server),同时在 samples 工程中编写自己的处理器代码
创建数据库(仅需要创建数据库):找到你的 DB,运行
SQL CREATE DATABASE IF NOT EXISTS powerjob-daily DEFAULT CHARSET utf8mb4
搞定~
配置项目

然后运行 powerjob-server-starter

启动成功
运行效果

先执行注册,然后再进行登录

任务管理

新增任务

任务实例

工作流管理

新增工作流

工作流实例

怎么用
编写示例代码

源码中给出了 案例
powerjob.worker.app-name=powerjob-worker-samples 看这里的配置

powerjob-worker-samples 这个就是应用的名字,在配置一个密码就可以进去了。
就启动起来了
首页里面就多了一条数据了

新建一个demo

我运行的案例中有一个 tech.powerjob.samples.processors.StandaloneProcessorDemo

所以这样写
可以进行运行了

其他功能

运行记录

日志

比其他框架来比较的话,效果和明显了。
指向配置还有其他方式
● 执行配置:由执行类型(单机、广播和 MapReduce )、处理器类型和处理器参数组成,后两项相互关联。
○ 内置Java处理器
■ 方式一 -> 填写该处理器的全限定类名(eg, tech.powerjob.samples.processors.MapReduceProcessorDemo)
■ 方式二 -> 填写 IOC 容器的 bean 名称,比如 Spring 用户可填写 Spring Bean 名称(eg, 处理器使用注解 @Component(value = "powerJobProcessor"),则控制台可填写 powerJobProcessor)
■ 方式三 -> 方法级注解,非 MapReduce 任务可直接使用注解 @PowerJobHandler 将某个方法转化为 PowerJob 任务,并设置唯一入参 TaskContext注入上下文,具体参考代码
@Component(value = "springMethodProcessorService")
public class SpringMethodProcessorService {
/**
* 处理器配置方法1: 全限定类名#方法名,比如 tech.powerjob.samples.tester.SpringMethodProcessorService#testEmptyReturn
* 处理器配置方法2: SpringBean名称#方法名,比如 springMethodProcessorService#testEmptyReturn
* @param context 必须要有入参 TaskContext,返回值可以是 null,也可以是其他任意类型。正常返回代表成功,抛出异常代表执行失败
*/
@PowerJobHandler(name = "testEmptyReturn")
public String testEmptyReturn(TaskContext context) {
OmsLogger omsLogger = context.getOmsLogger();
omsLogger.warn("测试日志");
return "响应结果,正常返回视为执行成功,抛出异常视为执行失败"
}
}
○ Java容器 -> 填写容器ID#处理器全限定类名(eg,1#cn.edu.zju.oms.container.ContainerMRProcessor)
○ SHELL、Python、SQL 、HTTP 等任务的执行:点击查看官方处理器的使用教程
这里里面有工作流的相关配置。
所以案例二内容
牵扯到workflow 的使用,先看教程在运行代码
https://www.yuque.com/powerjob/guidence/mdbdcf
还可以配置警告
报警配置(邮件、WebHook、钉钉、自定义)
在配置里面配置即可
写上配置即可

官网
http://www.powerjob.tech/
文档
https://www.yuque.com/powerjob/guidence/quick_start