项目使用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…)

  • 高可用 & 高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。

  • 故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。

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

项目QuartZxxl-jobSchedulerX 2.0PowerJob
定时类型CRONCRONCRON、固定频率、固定延迟、OpenAPICRON、固定频率、固定延迟、OpenAPI
任务类型内置Java内置Java、GLUE Java、Shell、Python等脚本内置Java、外置Java(FatJar)、Shell、Python等脚本内置Java、外置Java(容器)、Shell、Python等脚本
分布式任务静态分片MapReduce 动态分片MapReduce 动态分片
在线任务治理不支持支持支持支持
日志白屏化不支持支持不支持支持
调度方式及性能基于数据库锁,有性能瓶颈基于数据库锁,有性能瓶颈不详无锁化设计,性能强劲无上限
报警监控邮件短信邮件,提供接口允许开发者扩展
系统依赖关系型数据库(MySQL、Oracle…)MySQL人民币任意 Spring Data Jpa支持的关系型数据库(MySQL、Oracle…)
DAG 工作流不支持不支持支持支持

官网文档: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,即第一个健康节点和随机,用于选择执行处理器节点的策略。

  • 最大实例数用于控制处理器节点数量,线程并发度用于控制并发,运行时间限制

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

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

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

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

相关文章

如何在 Windows 上从电脑硬盘恢复照片

如今&#xff0c;随着相机设备的普及&#xff0c;您可以轻松地一次拍摄一堆照片&#xff0c;将它们传输到硬盘上&#xff0c;然后再拍摄更多照片。但是&#xff0c;如果您的所有照片意外丢失在驱动器中怎么办&#xff1f;你能恢复它们吗&#xff1f; 在本指南中&#xff0c;我…

EasyRecovery2024永久免费版电脑数据恢复软件

EasyRecovery是一款操作安全、价格便宜、用户自主操作的非破坏性的只读应用程序&#xff0c;它不会往源驱上写任何东西&#xff0c;也不会对源驱做任何改变。它支持从各种各样的存储介质恢复删除或者丢失的文件&#xff0c;其支持的媒体介质包括&#xff1a;硬盘驱动器、光驱、…

postgresql可视化导入csv文件

不需要在命令行copy了&#xff0c;只需简单点几下 1.在数据库下建一个schema 右击选中数据库-new schema 2.双击你创建的schema&#xff0c;出现tables 3.右击tables&#xff0c;选择import wizard 4.选择你想导入的文件格式&#xff0c;之后一直next 5.选择你的文件所在位置…

C语言实用第三方库Melon开箱即用之多线程模型

在之前的文章中&#xff08;开发利器——C 语言必备实用第三方库&#xff09;&#xff0c;笔者介绍了一款Linux/UNIX下C语言库Melon的基本功能&#xff0c;并给出了一个简单的多进程开箱即用的例子。 本文将给大家介绍Melon中多线程的使用方法。 在Melon中有三种多线程模式&a…

Redis 之父锐评 LLM 编程:全知全能 Stupid|一周IT资讯

阿里通义千问上线“科目三”&#xff0c;刘皇叔、奥特曼、马斯克通通没逃过 在刚到的2024年&#xff0c;阿里通义千问 APP 上线图片生成舞蹈功能&#xff0c;用户只需输入一张图片&#xff0c;就能生成爆款舞蹈图片。 不管是“科目三”&#xff0c;还是鬼步舞、兔子舞&#x…

(18)Linux 实现简易版shell

前言&#xff1a;做一个 "会创建&#xff0c;会终止&#xff0c;会等待&#xff0c;会程序替换" 的简易 shell 。 1、显示提示符和获取用户输入 shell 本质就是个死循环&#xff0c;我们不关心获取这些属性的接口&#xff0c;如果要实现 shell&#xff1a; 1&…

015:JS之正则表达式,web乱码和路径问题总结,MVC架构模式

一 JS的正则表达式 1 正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用于对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。 语法 var pattnew RegExp(pattern,modifiers);//正则的格式模版&#xff0c;修饰符或者更简单的方式:var pa…

权威测评首家通过!亚信安慧AntDB通过中国信通院数据库迁移工具专项测试

近日&#xff0c;亚信安慧数据库数据同步平台在中国信通院第17批“可信数据库”数据库迁移工具专项测试中&#xff0c;完全符合《数据库迁移工具能力要求》&#xff0c;成为首家通过标准测试的产品。这一成果标志着湖南亚信安慧科技有限公司&#xff08;简称“亚信安慧”&#…

Pandas透视表及应用

Pandas 透视表概述 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。 之所以称为数据透视表&#xff0c;是因为可以动态地改变它们的版面布置&#xf…

Git保姆级安装教程

Git保姆级安装教程 一、去哪下载二、安装2.1 具体安装步骤2.2 设置全局用户签名 一、去哪下载 1、官网&#xff08;有最新版本&#xff09;&#xff1a;https://git-for-windows.github.io/ 2、本人学习时安装的版本&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1uAo…

Spark内核解析-数据存储5(六)

1、Spark的数据存储 Spark计算速度远胜于Hadoop的原因之一就在于中间结果是缓存在内存而不是直接写入到disk&#xff0c;本文尝试分析Spark中存储子系统的构成&#xff0c;并以数据写入和数据读取为例&#xff0c;讲述清楚存储子系统中各部件的交互关系。 1.1存储子系统概览 …

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统 随着油气工业的发展&#xff0c;管道泄漏成为一个严峻的安全问题。本文介绍了一种基于LabVIEW的分布式光纤油气管道泄漏检测及预警系统的设计思路和组成结构。系统包括硬件和软件两部分&#xff0c;其中硬件部分详细阐述了分…

redis报错:Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

Redis启动时报错&#xff1a; Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 这个错误说明已经开启了redis&#xff0c;并且已经占用了端口6379&#xff0c;需要停止redis后再开启。 redis-cli.exeshutdownexitredis-server redis.windows.conf 参考…

java每日一题——输出星星塔(答案及编程思路)

前言&#xff1a; 打好基础&#xff0c;daydayup! 题目&#xff1a;请编写输出如下图的星星塔 编程思路&#xff1a;1&#xff0c;计算要输入几行&#xff1b;2&#xff0c;计算每行的⭐数量&#xff0c;及空格的数量&#xff1b;计算相应的关系&#xff1b; 如图&#xff1a;假…

Redis 有序集合(sorted set) 命令

目录 1.Redis Zrevrank 命令 - 返回有序集合中指定成员的排名&#xff0c;有序集成员按分数值递减(从大到小)排序简介语法可用版本: > 2.2.0返回值: 如果成员是有序集 key 的成员&#xff0c;返回成员的排名。 如果成员不是有序集 key 的成员&#xff0c;返回 nil 。 示例 2…

视频号掀起内容新风向,这几类账号为何爆红?

12月初&#xff0c;视频号就迎来了好消息&#xff0c;官方发布消息称&#xff0c;视频号作者加入互选的门槛由10000粉调整为5000粉&#xff0c;其他条件不变。此举旨在激励更多创作者积极投入视频内容创作&#xff0c;从而获得更多商业合作的机会和收益。 为帮助大家更好地洞察…

前端下载文件问题之如何获取报错信息

问题&#xff1a;点击下载后。接口会生成并返回文件流。在极端情况下接口数据返回异常&#xff0c;需要抛出错误信息&#xff0c;比如后端拼接错误情况、空文件情况。 难点&#xff1a;responseType设置为Blob后&#xff0c;返回内容为二进制文件流&#xff0c;从而无法获取错误…

Nginx学习之Nginx高性能的实现原理

Nginx学习之Nginx高性能的实现原理   Nginx 采用的是多进程&#xff08;单线程&#xff09; & 多路IO复用模型&#xff0c;使用了 I/O 多路复用技术的 Nginx&#xff0c;就成了”并发事件驱动“的服务器&#xff0c;同时使用sendfile等技术&#xff0c;最终实现了高性能。…

简单最短路径算法

前言 图的最短路径算法主要包括&#xff1a; 有向无权图的单源最短路径 宽度优先搜索算法&#xff08;bfs&#xff09; 有向非负权图的单源最短路径 迪杰斯特拉算法&#xff08;Dijkstra&#xff09; 有向有权图的单源最短路径 贝尔曼福特算法&#xff08;Bellman-Ford&#…