PowerJob的启动及使用

news2024/11/17 11:34:40

首先,本文中提到的server就是指powerjob-server模块(也就是powerJob的重点之一的调度服务)

一、初始化项目

1. PowerJob的下载                    官方文档

2. 导入到IDEA中,下载依赖后,打开powerjob-server模块的application.properties

3.根据spring.profiles.active设置的环境 , 打开对应的application-xxx.properties文件修改数据源以及邮箱

4. 创建数据库

   4.1 仅需要创建数据库:找到你的DB,运行 SQL CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4
                ---- postgre执行的是CREATE DATABASE "powerjob-product"

  4.2 官方提示:如果你暂时没有可用的数据库进行测试,那么可以使用以下数据库配置来一键启动 server(仅限测试环境使用!):
spring.datasource.core.driver-class-name=org.h2.Driver
spring.datasource.core.jdbc-url=jdbc:h2:file:~/h2/powerjob-daily-test
spring.datasource.core.username=sa
spring.datasource.core.password=

二、启动powerjob-server调度服务器

5. 在子模块powerjob-server-starter中启动PowerJobServerApplication.java,成功后访问 http://127.0.0.1:7700/

 

6. 注册应用,应用名称与密码都输入powerjob-agent-test(可随意更改,但后续需要在worker模块启动之前更改properties对应的名字为刚刚注册的名字)

 三、编写任务demo,并启动samples(也就是定时任务)

7. 进入示例工程(powerjob-worker-samples),修改 powerjob-worker-samples 的 application.properties,将 powerjob.worker.app-name 改为刚刚在控制台注册的名称

server.port=8081
spring.jpa.open-in-view=false
# akka 工作端口,可选,默认 27777
powerjob.worker.akka-port=27777
# 接入应用名称,用于分组隔离,推荐填写 本 Java 项目名称
powerjob.worker.app-name=powerjob-agent-test
# 调度服务器地址,IP:Port 或 域名,多值逗号分隔
powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701
# 持久化方式,可选,默认 disk
powerjob.worker.store-strategy=disk
# 任务返回结果信息的最大长度,超过这个长度的信息会被截断,默认 8192
powerjob.worker.max-result-length=4096
# 单个任务追加的工作流上下文最大长度,超过这个长度的会被直接丢弃,默认 8192
powerjob.worker.max-appended-wf-context-length=4096

 8. 新建任务或使用已有的任务Demo

    8.1 powerjob-worker-samples这个模块本身就继承了powerjob-worker模块,里面也定义了大量的任务Demo,一开始为了启动就直接任意使用一个demo进行测试

   例如我使用StandaloneProcessorDemo.java,任意改了些中文日志,为了待会好看结果

   8.2 如果不想使用已有的demo,也可以在samples模块随便找个地方新建类,只需要在新建的类上执行以下操作即可

        8.2.1添加@Component注解以及implements 官方4种处理器即可,处理器内实现自己的定时任务逻辑
        8.2.2 方法定义固定格式,参考以下(统一返回值为ProcessResult,统一方法名为process,统一入参TaskContext):
public ProcessResult process(TaskContext context)

9. 启动示例程序,即直接运行主类 tech.powerjob.samples.SampleApplication,观察控制台输出信息,判断是否启动成功

四、单机任务的配置与运行

10. 调度服务器与示例工程都启动完毕后,再次前往Web页面( http://127.0.0.1:7700/ ),进入首页就能看到刚刚部署成功的worker-samples(执行器)

11.  点击任务管理 -> 新建任务(右上角),开始创建任务

Powerjob的CRON模式下,时间轮是15秒扫描一次,cron表达式不能小于15秒。若低于15秒会按15秒运行,解决办法就是不用cron表达式,改用固定频率或固定延迟进行

12. 保存后,在列表点击运行,我设置的是15秒运行一次,可以在任务实例中看到执行详情:

 至此,简单的单机运行测试结束

五、广播执行模式的配置与运行

13. 在powerjob-worker-samples模块中把application.properties文件改名为application-worker1.properties,再复制一份修改为application-worker2.properties,worker2中server.port改成8082,powerjob.worker.port改成27778

14.启动2个powerjob-worker-samples服务

 15.启动成功后,页面刷新就可以看到2个worker执行器了

16. 复制之前写好的单机执行任务,改成广播执行即可(理论上来说需要选择一个实现了BroadcastProcessor的处理Demo类,例如BroadcastProcessorDemo,但实际我最后运行没有任何问题,本身广播BroadcastProcessor就是在BasicProcessor单机的基础上添加了执行前后两个方法,不报错应该只是没有执行前后方法吧,暂不深究)

17.运行广播模式任务

终、官方描述与目前使用总结:

PowerJob的无锁化(目前已有的开源调度框架为了解决重复调度,大都使用各种锁)

    引入分组依据  AppName,以应用集群作为 server 调度的单位。 每一个 worker 集群在运行时只会连接到某一台 server。 每一个 server 实例只会调度当前与自己保持心跳的 worker 关联的 AppName 下的所有任务。

PowerJob的高性能调度——时间轮

趣讲 PowerJob 超强大的调度层  ---故事

server会15秒扫描一次job_info表找到next_trigger_time在15秒之内的任务推进时间轮中,也就会在instance_info表中添加一条数据,页面状态: 

官方提供的4种处理器:

1. 单机处理器(BasicProcessor)对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算(也就是集群后也只有一台服务器会执行定时任务)。
        --单机执行的策略下,server 会在所有可用 worker 中选取健康度最佳的机器进行执行。单机执行任务需要实现接口 BasicProcessor
2. 广播处理器(BroadcastProcessor)对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算
--广播处理器在BasicProcessor 的基础上额外增加了 preProcess 和 postProcess 方法,分别在整个集群开始之前/结束之后选一台机器执行相关方法
3. MapReduce 是最复杂也是最强大的一种执行器,它允许开发者完成任务的拆分,将子任务派发到集群中其他Worker 执行,是执行大批量处理任务的不二之选!实现 MapReduce 处理器需要继承 MapReduceProcessor类。
--- MapReduce 处理器(MapReduceProcessor)对应了 MapReduce 任务,在 Map 任务的基础上,增加了所有任务结束后的汇总统计
4.  Map 处理器相当于 MapReduce 处理器的阉割版本(阉割了 reduce 方法)

○ 内置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 等任务的执行:点击查看官方处理器的使用教程
● 运行配置
○ 派发策略:默认健康度优先,优先选择性能最优机器进行执行,可选随机均摊等其他派发模式
○ 最大实例数:该任务同时执行的数量,0 代表不限制实例数量
○ 单机线程并发数:该实例执行过程中每个 Worker 使用的线程数量(MapReduce 任务生效,其余无论填什么,都只会使用必要的线程数)
○ 运行时间限制:限定任务的最大运行时间,超时则视为失败,单位毫秒,0 代表不限制超时时间(不建议不限制超时时间)。
● 重试配置:
○ Instance 重试次数:实例级别,失败了整个任务实例重试,会更换 TaskTracker(本次任务实例的Master节点),代价较大,大型Map/MapReduce慎用。
○ Task 重试次数:Task 级别,每个子 Task 失败后单独重试,会更换 ProcessorTracker(本次任务实际执行的 Worker 节点),代价较小,推荐使用。
○ 注:请注意同时配置任务重试次数和子任务重试次数之后的重试放大,比如对于单机任务来说,假如任务重试次数和子任务重试次数都配置了 1 且都执行失败,实际执行次数会变成 4 次!推荐任务实例重试配置为 0,子任务重试次数根据实际情况配置。
● 机器配置:用来标明允许执行任务的机器状态,避开那些摇摇欲坠的机器,0 代表无任何限制。
○ 最低 CPU 核心数:填写浮点数,CPU 可用核心数小于该值的 Worker 将不会执行该任务。
○ 最低内存(GB):填写浮点数,可用内存小于该值的 Worker 将不会执行该任务。
○ 最低磁盘(GB):填写浮点数,可用磁盘空间小于该值的 Worker 将不会执行该任务。
● 集群配置
○ 执行机器地址,指定集群中的某几台机器执行任务
■ IP模式:多值英文逗号分割,如192.168.1.1:27777,192.168.1.2:27777。常用于 debug 等场景,需要指定特定机器运行。
■ TAG 模式:通过 PowerJobWorkerConfig#tag将执行器打标分组后,可在控制台通过 tag 指定某一批机器执行。常用于分环境分单元执行的场景。如某些任务需要屏蔽安全生产环境(tag 设置为环境标),某些任务只需要在特定单元执行(tag 设置单元标)
○ 最大执行机器数量:限定调动执行的机器数量
● 报警配置:选择任务执行失败后报警通知的对象,需要事先录入。
● 日志配置:可使用控制台配置调整 Job 使用的 Logger 及 LogLevel
○ 支持 SERVER(服务端日志,默认)、LOCAL(本地日志)、STDOUT(系统输出)、NULL(空实现)4种 LogType
○ 支持 DEBUG、INFO、WARN、ERROR、OFF 5种级别控制
○ 使用建议:初期调试可使用 SERVER 日志,后续功能稳定后改为 LOCAL,并调高日志级别,降低通讯压力,消除性能瓶颈问题

        以上可见PowerJob重点分为调度服务(powerjob-server)执行器(powerjob-worker)两部分,而刚刚启动的powerJob-worker-samples本身就是基于powerjob-worker的一些任务实现也就是一些任务案例、Demo,我们只是把任务写在samples然后启动程序后,在web进行任务调度,实际这个samples模块可以是任何其他模块,只要这个模块的pom.xml依赖powerjob-worker,任务类实现4大处理器即可

server与worker之间使用HTTP+JSON进行通信

powerjob-server:调度中心,整个公司内部统一部署,负责任务管理和调度承担任务派发(调度)、后续状态检测、Web服务(也就是我们访问的可视化页面)】

powerjob-worker:执行器,提供单机执行、广播执行和分布式计算等功能执行任务

powerjob-client:可选组件,OpenAPI 客户端(也就是官方提供的各处理器不符合你的业务逻辑,那么就可以使用官方提供的api扩展)

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

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

相关文章

开发中常用的小脚本、工具

文章目录 1. mysql数据库相关1.1 查看数据库各表占用内存大小1.2 数据库字段脱敏脚本 1. mysql数据库相关 1.1 查看数据库各表占用内存大小 SELECT table_name, ROUND(((data_length index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.t…

Instagram合规运营的10条策略

Instagram每月活跃用户15亿,是跨境外贸开发客户与广告引流的常用工具。本文总结10条Instagram运营基本策略与原则,帮助各位跨境人更好的了解平台规则,规避风险,提高投放效率! 1、使用商业账号 企业在instagram 上进行…

高精度参考电压源是什么意思

高精度参考电压源是一种能够提供稳定、准确且可靠的参考电压的电路或器件。在电子系统中,参考电压起着至关重要的作用,它被用作比较、校准、测量等各种应用中的基准电压。高精度参考电压源能够提供高精度的参考电压,具有很低的温漂、噪声和漂…

软考A计划-系统集成项目管理工程师-项目变更管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

2023年天府杯A 题:震源属性识别模型构建与震级预测

基于数据分析的震源属性识别模型构建与震级预测问题的研究 问题一: 解题思路: 第一部: 对数据进行一个处理,将数据进行分类,求出数据中的最大值,最小值,极差,方差等等一系列特征数据。,将天然…

Git企业开发控制理论和实操-从入门到深入(三)|分支管理

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

PhantomJS+java 后端生成echart图表的图片

PhantomJSjava 后端生成echart图表的图片 前言源码效果实现echarts-convertPhantomJS实现echarts截图得到图片java延时读取base64数据 参考 前言 该项目仅用作个人学习使用 源码 地址 docker镜像: registry.cn-chengdu.aliyuncs.com/qinjie/java-phantomjs:1.0 …

【Git】代码误推送还原(真实项目环境,非纸上谈兵)

背景 RT, 我今天眼睛花了,不小心把工作分支【合并】到了一个不相干的功能分支上,并且代码已经推送到远程仓库了。于是,只能尝试还原到上一次提交中。 【合并】分支有一个点我们是不可避免的,文字很难描述,…

一文总结:如何在csdn中使用markdown写出精美文章

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

导出功能exportExcel (现成直接用)

1. 实体类字段上加 Excel(name "xxx"), 表示要导出的字段 Excel(name "订单号")private String orderNo; 2. controller (get请求) /*** 导出订单列表*/ApiOperation("导出订单列表")GetMapping("/export")public void export(HttpS…

Ompl初探

在/ompl-1.x.0/build/Release/bin下有很多生成的demo可执行文件 在终端执行 ./demo_Point2DPlanning 测试程序 #include <ompl/base/SpaceInformation.h> #include <ompl/base/spaces/SE3StateSpace.h> #include <ompl/base/StateSpace.h> #include <o…

Python“牵手”蘑菇街商品详情API接口运用场景及功能介绍,蘑菇街接口申请指南

蘑菇街是专注于时尚女性消费者的电子商务网站&#xff0c;是时尚和生活方式目的地。 蘑菇街通过形式多样的时尚内容等时尚商品&#xff0c;让人们在分享和发现流行趋势的同时&#xff0c;享受购物体验。蘑菇街不是一个购物平台&#xff0c;它是一个购物指南网站&#xff0c;帮…

python3对接godaddy API,实现自动更改域名解析(DDNS)

python3对接godaddy API&#xff0c;实现自动更改域名解析&#xff08;DDNS&#xff09; 文章开始前&#xff0c;先解释下如下问题&#xff1a; ①什么是域名解析&#xff1f; 域名解析一般是指通过一个域名指向IP地址&#xff08;A解析&#xff09;&#xff0c;然后我们访问…

缓存之争:Redis和JVM面对面,你会选谁?

大家好&#xff0c;我是你们的小米&#xff01;今天要和大家聊聊一个在技术面试中经常被问到的问题&#xff1a;Redis缓存和JVM缓存有什么区别呢&#xff1f;相信这个问题在不少小伙伴的面试路上都遇到过&#xff0c;今天就让我们来深入剖析一下吧&#xff01; 缓存的作用和意…

【Spring Boot】详解条件注解以及条件拓展注解@Conditional与@ConditionalOnXxx

Spring Conditional Spring 4.0提供的注解。作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的&#xff0c;可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所以说这个注解增加了对Bean装载的灵活性。…

基于FPGA视频接口之HDMI2.0编/解码

简介 为什么要特别说明HDMI的版本,是因为HDMI的版本众多,代表的HDMI速度同样不同,当前版本在HDMI2.1速度达到48Gbps,可以传输4K及以上图像,但我们当前还停留在1080P@60部分,且使用的芯片和硬件结构有很大差别,故将HDMI分为两个部分说明1080@60以下分辨率和4K以上分辨率(…

怎么写出更好的高质量内容输出

为了更好地输出高质量的内容&#xff0c;不仅仅需要了解写作的基本原则&#xff0c;还需要深入挖掘目标读者的需求、持续的自我提升以及对信息的严格筛选。以下是一些建议&#xff0c;帮助你更好地输出高质量的内容&#xff1a; 1.充分了解你的受众 调查和了解你的目标读者&am…

SpringBoot整合阿里云OSS,实现图片上传

在项目中&#xff0c;将图片等文件资源上传到阿里云的OSS&#xff0c;减少服务器压力。 项目中导入阿里云的SDK <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>…

1985-2021年30m全国逐年土地覆被数据(含分省数据)

1.研究背景 2022年8月,武汉大学杨杰和黄昕教授团队向公众发布了CLCD 2021年全国土地覆数据。 中国在过去几十年中经济和人口迅速发展,土地覆盖随之发生巨大变化,因此迫切需要对其进行连续和精细的监测。然而,由于缺乏足够的训练样本和计算能力,基于卫星遥感观测数据的中国…

问道管理股市资讯:影视股集体走高,暑期档票房持续破纪录

影视股24日盘中集体走高&#xff0c;截至发稿&#xff0c;幸福蓝海、金逸影视涨停&#xff0c;上海电影、横店影视涨约8%&#xff0c;百纳千成、光线传媒涨约5%&#xff0c;中国电影、唐德影视、华谊兄弟等涨超3%。 上海问道私募基金管理有限公司&#xff08;百度一下问道管理&…