使用PowerJob做任务调度模块

最近项目中使用了PowerJob做任务调度模块,感觉这个框架真香,今天我们就来深入了解一下新一代的定时任务框架——PowerJob!

简介

PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样,基于web页面实现任务调度配置与记录,使用简单,上手快速,其主要功能特性如下:

  • 使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。
  • 定时策略完善:支持 CRON 表达式、固定频率、固定延迟和API四种定时调度策略。
  • 执行模式丰富:支持单机、广播、Map、MapReduce 四种执行模式,其中 Map/MapReduce 处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。
  • 工作流支持:支持在线配置任务依赖关系(DAG),以可视化的方式对任务进行编排,同时还支持上下游任务间的数据传递,以及多种节点类型(判断节点 & 嵌套工作流节点)。
  • 执行器支持广泛:支持 Spring Bean、内置/外置 Java 类,另外可以通过引入官方提供的依赖包,一键集成 Shell、Python、HTTP、SQL 等处理器,应用范围广。
  • 运维便捷:支持在线日志功能,执行器产生的日志可以在前端控制台页面实时显示,降低 debug 成本,极大地提高开发效率。
  • 依赖精简:最小仅依赖关系型数据库(MySQL/PostgreSQL/Oracle/MS SQLServer…)
  • 高可用 & 高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。
  • 故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。

相对于其他定时任务框架具有无锁化设计,更强悍的性能支撑,我们通过官网的产品对比可以了解详情:

图片

官网文档:http://www.powerjob.tech/

定时任务类型

与传统的定时任务框架对比,powerJob支持更多的定时任务类型:

  • API: 通过客户端提供的api接口触发,服务端不会主动调度,适用于与业务服务上下连接或只调度一次的业务场景
  • CRON: 通过cron表达式调度,这是多数定时任务框架都支持的
  • 固定频率:每隔多少毫秒执行一次。
  • 固定延迟:延迟多少毫秒执行一次
  • 工作流:配合工作流进行调度,服务端不会主动调度,当工作流节点执行到该任务时运行。

安装

PowerJob支持两种安装方式,一是通过jar包运行,一是通过docker安装

docker的安装较为简单,且官网有详细说明,这里就不单独讲解了,大家可参考官方文档:

  • https://www.yuque.com/powerjob/guidence/docker-compose

如何通过jar形式运行的

1、首先我们可以在github上下载源码,可以自己编译打包

  • https://github.com/PowerJob/PowerJob

可以在releases中下载指定版本

2、在IDE中打开后,我们powerjob-server就是我们要的服务端源码,可以直接编译,而powerjob-worker-samples就是springboot下的使用示例

3、在运行编译服务端之前,我们需要先创建数据库,在指定的数据库下创建即可

CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4

4、然后将powerjob-server/powerjob-server-starter下的application-daily.properties配置文件中的数据库配置改成你服务器的

其中daily,pre,product 表示日常、预生产、生产环境下的配置,与我们常见的dev, test, prod类似,可以根据需要进行调整

图片

其中还有邮箱及其他配置,如果有需要也可以调整,服务端的参数配置可参考官网文档。

5、我们先来本地运行启动类PowerJobServerApplication一下试试,启动成功后,访问http://localhost:7700,出现登陆页则说明运行成功

图片

6、先注册一个执行器,注意这里的应用名称不能顺便取,下文在客户端的配置的app-name要与该名称保持一致

7、然后用该执行器名和密码登录

8、如下,我们就登录成功了

图片

9、如果需要发布到服务器或虚拟机上运行,可以进行编译打包操作:

1)点击mvn install 将依赖包打包到本地仓库

图片

注意,如果这里报错

Please refer to /Library/project/study/java/PowerJob-4.3.2/powerjob-server/powerjob-server-starter/target/surefire-reports for the individual test results.

那么可以将maven的健康检查关闭

点击如图所示按钮,并且看到test置灰,则表示关闭

图片

2)执行mvn package打包项目

图片

10、在powerjob-server-starter的target目录下即可看到打包出来的jar,将其上传到指定服务器,通过java -jar指令即可运行

图片

定时任务创建

1、创建一个springboot项目,用于定时任务客户端,引入客户端依赖,如果是spring或其他java项目引入,可参考官网文档:

  • https://www.yuque.com/powerjob/guidence/ygonln
<dependency><groupId>tech.powerjob</groupId><artifactId>powerjob-worker-spring-boot-starter</artifactId><version>4.3.2</version>
</dependency>

2、修改配置文件

powerjob:worker:enabled: trueenable-test-mode: false# 数据传输端口,默认27777port: 27777# 应用名称,与服务端创建的应用账号的名称保持一致app-name: powerjob-agent-test# 服务端地址,多个用,隔开server-address: 127.0.0.1:7700# 通讯协议,4.3.0之后支持http和akka,4.3.0之前仅支持akka,官方推荐httpprotocol: http# 任务返回结果信息的最大长度,超过该值将被截断max-result-length: 4096# 同时运行的轻量级任务数量上限max-lightweight-task-num: 1024# 同时运行的重量级任务数量上限max-heavy-task-num: 64

3、启动类上添加注解@EnableScheduling

4、通过申明BasicProcessor接口,实现process方法来书写一个简单的定时任务示例类,注意要声明为bean

/*** @author benjamin_5* @Description 简单任务执行器* @date 2023/5/3*/
@Component
public class SimpleJobServer implements BasicProcessor {@Overridepublic ProcessResult process(TaskContext taskContext) throws Exception {String jobParams = taskContext.getJobParams();System.out.println("参数: " + jobParams);System.out.println("定时任务执行");return new ProcessResult(true, "定时任务执行成功");}
}

5、启动客户端项目,运行成功后,可以在服务端首页看到机器实例

图片

6、服务端任务管理点击新建任务

其中处理器配置是通过书写处理器的全类路径名来声明的,比如我这里是com.example.powerjobdemo.job.SimpleJobServer

图片

7、创建成功后,可以在列表看到新建的任务

图片

8、打开客户端控制台,也能看到输出的参数和执行打印,说明任务执行成功

图片

9、同时我们可以在运行记录中看到执行日志

图片

图片

至此,针对powerjob的最简单使用就完成了,接下来我们继续来看关于powjob的配置详解

3. 任务配置参数详解

创建任务时我们可以看到如下图所示的配置:

图片

定时信息:

主要选择定时任务类型,支持API, CRON,固定频率、固定延迟、工作流、每日固定间隔等几种定时任务类型。

生命周期:

这是比其他任务框架更便捷的功能,指定了任务的生效周期,如果该任务是预定某时间段内执行的,可以通过该参数配置

执行配置:

  • 执行类型支持单机执行、广播执行、Map执行、MapReduce执行
  • 单机执行表示只需要有一个节点执行任务即可的场景
  • 广播执行表示需要全部节点一同执行的场景,比如清除机器日志、各节点数据统计
  • Map与MapReduce执行都是表示分布式、分批执行,用来拆分计算量、耗时较大的任务,区别在于Map执行是一种简单的数据处理逻辑,特点是将输入数据拆分成多个子块,并交给多个分布式节点同时执行,以提高数据处理效率,适用于简单的数据处理场景
  • MapReduce执行是一种大数据处理框架,处理逻辑是将复杂的数据处理拆分成Map和Reduce阶段进行处理,通过数据分组计算后合并来提供数据处理效率,更适合复杂的大数据场景

运行时配置:

  • 支持HEALTH_FIRSTRANDOM,即第一个健康节点和随机,用于选择执行处理器节点的策略。
  • 最大实例数用于控制处理器节点数量,线程并发度用于控制并发,运行时间限制

更多说明,可在官方文档中查看:

于简单的数据处理场景

  • MapReduce执行是一种大数据处理框架,处理逻辑是将复杂的数据处理拆分成Map和Reduce阶段进行处理,通过数据分组计算后合并来提供数据处理效率,更适合复杂的大数据场景

运行时配置:

  • 支持HEALTH_FIRSTRANDOM,即第一个健康节点和随机,用于选择执行处理器节点的策略。
  • 最大实例数用于控制处理器节点数量,线程并发度用于控制并发,运行时间限制

更多说明,可在官方文档中查看:

  • https://www.yuque.com/powerjob/guidence/ysug77

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323501.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PLC三相电动机Y-▲启动控制程序示例

一、三相电动机星三角启动接法。 二、因为电动机在启动的时候启动电流非常的大&#xff0c;所以在启动时采用星型接法&#xff0c;也就是Y型接法&#xff0c;也就是图上的KM1和KM2接通&#xff0c;目的为了减小启动电流&#xff0c;采用Y型接法的启动电流是原来电流的1/3 三、启…

WPS/PPT插件-大珩助手免费功能更新-特殊字符

扩展特殊格式下特殊字符&#xff0c;增加200多个常用特殊字符&#xff0c;可直接点击插入。 PPT大珩助手 1.7.6 1、提供素材库功能&#xff0c;可实现一键保存素材&#xff0c;支持对选中的形状&#xff0c;支持一键替换素材&#xff0c;保留原素材的尺寸和位置&#xff0c;…

Linux第17步_安装SSH服务

secure shell protocol简称SSH。 目的&#xff1a;在进行数据传输之前&#xff0c;SSH先对联级数据包通过加密技术进行加密处理&#xff0c;然后再进行数据传输&#xff0c;确保数据传输安全。 1、在安装前&#xff0c;要检查虚拟机可以上网&#xff0c;否则可能会导致安装失…

开源分布式任务调度系统DolphinScheduler本地部署与远程访问

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

PPT插件-大珩助手-文字整理功能介绍

删空白行 删除文本中的所有空白行 清理编号 删除文本中的段落编号 清理格式 删除文本中的换行、空格符号 清理艺术 删除文本的艺术字效果 清理边距 删除文本框与文字之间的间隙 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实…

FastApi-快速入门 加入逻辑 二张图片的比对 2

加入图片相似度功能 getpic进行网络图片保存在本地 # -*- coding: utf-8 -*- import os import uuid from PIL import Image import requests from io import BytesIO# 对图片进行统一化处理 def get_thum(image, size(64, 64), greyscaleFalse):if image is None:raise Valu…

《操作系统导论》笔记

操作系统三个关键&#xff1a;虚拟化( virtualization) 并发(concurrency) 持久性&#xff08;persistence&#xff09; 1 CPU虚拟化 1.1 进程 虚拟化CPU&#xff1a;许多任务共享物理CPU&#xff0c;让它们看起来像是同时运行。 时分共享&#xff1a;运行一个进程一段时间…

wsl(ubuntu)创建用户

我们打卡ubuntu窗口&#xff0c;如果没有创建用户&#xff0c;那么默认是root用户 用户的增删改查 查 查询所有的用户列表 cat /etc/passwd | cut -d: -f1cat /etc/passwd: 这个命令用于显示 /etc/passwd 文件的内容。/etc/passwd 文件包含了系统上所有用户的基本信息。每一…

将文本文件导入Oracle数据库的简便方法:SQL Developer

需求 我有一个文本文件dbim.txt&#xff0c;是通过alert log生成的&#xff0c;内容如下&#xff1a; 2020-09-11 2020-09-11 ... 2023-12-03 2023-12-03 2023-12-26我已经在Oracle数据库中建立了目标表&#xff1a; create table dbim(a varchar(16));我想把日志文件导入Or…

风车模型与代码

这个模型使用NetLogo乌龟来重复绘制圆圈&#xff0c;定期转动&#xff0c;以便显示出类似万花筒或风车的效果。这是一个演示&#xff0c;展示了一组简单的代理规则如何产生复杂而美丽的图案。 内部工作原理非常简单。创建了许多乌龟&#xff0c;它们的笔都是放下的&#xff08…

独立站的移动端优化:确保网站在手机和平板设备上具有良好的用户体验和交互效果

独立站的移动端优化是至关重要的&#xff0c;因为越来越多的用户通过手机和平板设备访问网站。为了确保在移动设备上具备良好的用户体验和交互效果&#xff0c;以下是一些建议&#xff1a; 响应式设计&#xff1a;使用响应式网页设计&#xff0c;使网站能够根据不同的设备屏幕…

进程是什么样子

你心中的进程长什么样子 进程是一个执行的过程。 1.进程的组成 1.1 进程控制块&#xff08;PCB&#xff09;&#xff1a;是进程存在的唯一标识&#xff0c;是进程的灵魂 1.2 进程实体&#xff1a;程序、程序要处理的数据集合。 2.进程控制块 3.进程的调度状态