分布式定时任务框架—PowerJob(分布式定时任务调度框架)
ccwgpt 2024-09-29 09:52 41 浏览 0 评论
前言:
我们在项目中的分布式定时任务通常运用主流的xxl-job定时任务框架,今天我们聊聊全新一代分布式任务调度与计算框架powerJob,具备很多优点:使用简单、定时策略完善、工作流支持、执行器支持广泛、运维便捷、依赖精简、高可用 &、高性能及故障转移与恢复等备受业界关注。
PowerJob简介
PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样,基于web页面实现任务调度配置与记录,使用简单,上手快速,因此迅速得到用户的欢迎。
相对于其他定时任务框架具有无锁化设计,更强悍的性能支撑,我们通过官网的产品对比可以了解详情。
官网文档:www.powerjob.tech/
定时任务类型
与传统的定时任务框架对比,powerJob支持更多的定时任务类型:
- API: 通过客户端提供的api接口触发,服务端不会主动调度,适用于与业务服务上下连接或只调度一次的业务场景。
- CRON: 通过cron表达式调度,这是多数定时任务框架都支持的。
- 固定频率:每隔多少毫秒执行一次。
- 固定延迟:延迟多少毫秒执行一次。
- 工作流:配合工作流进行调度,服务端不会主动调度,当工作流节点执行到该任务时运行。
整体框架:
PowerJob安装
PowerJob支持两种安装方式,一是通过jar包运行,一是通过docker安装
docker的安装较为简单,且官网有详细说明,这里就不单独讲解了,大家可参考官方文档。
我们讲解通过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/deploy_worker
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
<version>4.3.2</version>
</dependency>
2、修改配置文件
powerjob:
worker:
enabled: true
enable-test-mode: false
# 数据传输端口,默认27777
port: 27777
# 应用名称,与服务端创建的应用账号的名称保持一致
app-name: powerjob-agent-test
# 服务端地址,多个用,隔开
server-address: 127.0.0.1:7700
# 通讯协议,4.3.0之后支持http和akka,4.3.0之前仅支持akka,官方推荐http
protocol: http
# 任务返回结果信息的最大长度,超过该值将被截断
max-result-length: 4096
# 同时运行的轻量级任务数量上限
max-lightweight-task-num: 1024
# 同时运行的重量级任务数量上限
max-heavy-task-num: 64
3、启动类上添加注解@EnableScheduling
4、通过申明BasicProcessor接口,实现process方法来书写一个简单的定时任务示例类,注意要声明为bean
/**
* @Description 简单任务执行器
* @date 2024/4/3
*/
@Component
public class SimpleJobServer implements BasicProcessor {
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
String jobParams = taskContext.getJobParams();
System.out.println("参数: " + jobParams);
System.out.println("定时任务执行");
return new ProcessResult(true, "定时任务执行成功");
}
}
5、启动客户端项目,运行成功后,可以在powerjob服务端首页看到机器实例、
6、服务端任务管理点击新建任务
其中处理器配置是通过书写处理器的全类路径名来声明的,比如我这里是com.example.powerjobdemo.job.SimpleJobServer
7、创建成功后,可以在列表看到新建的任务
8、打开客户端控制台,也能看到输出的参数和执行打印,说明任务执行成功
9、同时我们可以在运行记录中看到执行日志
至此,针对powerjob的最简单使用就完成了,接下来我们继续来看关于powjob的配置详解。
任务配置参数详解
创建任务时我们可以看到如下图所示的配置:
- 定时信息:
主要选择定时任务类型,支持API, CRON,固定频率、固定延迟、工作流、每日固定间隔等几种定时任务类型。
- 生命周期:
这是比其他任务框架更便捷的功能,指定了任务的生效周期,如果该任务是预定某时间段内执行的,可以通过该参数配置
- 执行配置:
执行类型支持单机执行、广播执行、Map执行、MapReduce执行 。
单机执行表示只需要有一个节点执行任务即可的场景广播执行表示需要全部节点一同执行的场景:
比如清除机器日志、各节点数据统计 Map与MapReduce执行都是表示分布式、分批执行,用来拆分计算量、耗时较大的任务,区别在于Map执行是一种简单的数据处理逻辑。
特点是将输入数据拆分成多个子块,并交给多个分布式节点同时执行,以提高数据处理效率,适用于简单的数据处理场景 MapReduce执行是一种大数据处理框架,处理逻辑是将复杂的数据处理拆分成Map和Reduce阶段进行处理,通过数据分组计算后合并来提供数据处理效率,更适合复杂的大数据场景。
- 运行时配置:
支持HEALTH_FIRST和RANDOM,即第一个健康节点和随机,用于选择执行处理器节点的策略。 最大实例数用于控制处理器节点数量,线程并发度用于控制并发,运行时间限制。
上面就是对powerjob定时任务的描述,在分布式业务中我们会经常用到定时任务,那么不妨尝试使用powerjob来实现,体验它的强大之处。
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)