本文适合有 Java 基础知识的人群


作者:HelloGitHub-Salieri

引言

HelloGitHub 推出的《讲解开源项目》[1]系列。

项目地址:

https://github.com/KFCFans/PowerJob

PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的调度中间件。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 'powerjob-worker' 即可接入获取任务调度与分布式计算能力。

因此,PowerJob 由调度服务器(powerjob-server)和执行器(powerjob-worker)两部分组成,powerjob-server 负责提供 Web 服务和完成任务的调度,powerjob-worker 则负责执行用户所编写的任务代码,同时提供分布式计算能力。

以下为在本地开发环境快速搭建并试用 PowerJob 的教程。

一、STEP1: 初始化项目

  1. git clone https://github.com/KFCFans/PowerJob.git

  2. 导入 IDE,源码结构如下,我们需要启动调度服务器(powerjob-server),同时在 samples 工程中编写自己的处理器代码


二、STEP2: 启动调度服务器

  1. 创建数据库(不需要建表,只需要创建数据库)powerjob-daily

  2. 修改配置文件,配置文件的说明官方文档[2]写的非常详细,此处不再赘述。由于是在本地 IDE 搭建测试环境,因此我们选择使用开发环境的配置文件 application-daily.properties 来修改并使用。需要修改的地方为数据库配置:

  • spring.datasource.core.jdbc-url
  • spring.datasource.core.username
  • spring.datasource.core.password
  • 当然,有 mongoDB 的同学也可以修改 spring.data.mongodb.uri 以获取完全版体验。

完成配置文件的修改后,可以直接通过启动类 OhMyApplication 启动调度服务器,观察启动日志,查看是否启动成功~启动成功后,访问 http://127.0.0.1:7700/ ,如果能顺利出现 Web 界面,则说明调度服务器启动成功!

注册应用:点击主页应用注册按钮,填入 powerjob-agent-test 和控制台密码(用于进入控制台),注册示例应用(当然你也可以注册其他的 appName,只是别忘记在示例程序中同步修改~)


三、STEP3: 编写示例代码

进入示例工程(powerjob-worker-samples),修改配置文件连接 powerjob-server 并编写自己的处理器代码。

  1. 修改 powerjob-worker-samples 的启动配置类 OhMySchedulerConfig将  appName 修改为刚刚在控制台注册的名称

  2. 编写自己的处理器:在示例工程中新建一个类,继承你想要使用的处理器(各个处理器的介绍可见官方文档[2]),这里为了简单演示,选择使用单机处理器 BasicProcessor ,以下代码示例演示了在线日志功能的使用。

    @Slf4j@Componentpublic class StandaloneProcessorDemo implements BasicProcessor {    @Override    public ProcessResult process(TaskContext context) throws Exception {        OmsLogger omsLogger = context.getOmsLogger();        omsLogger.info("start process,context is {}.", context);        System.out.println("jobParams is " + context.getJobParams());                return new ProcessResult(true, "process successfully~");    }}
  3. 启动示例程序,即直接运行主类 SampleApplication,观察控制台输出信息,判断是否启动成功。

四、STEP4: 任务的配置与运行

调度服务器与示例工程都启动完毕后,再次前往 Web 页面( http://127.0.0.1:7700/ ),进行任务的配置与运行。

  1. 在首页输入框输入配置的应用名称,成功操作后会正式进入前端管理界面。

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

  1. 完成任务创建后,即可在控制台看到刚才创建的任务,如果觉得等待调度太过于漫长,可以直接点击运行按钮,立即运行本任务。


  2. 前往任务示例边栏,查看任务的运行状态和在线日志


4.1 基本配置

  • 任务名称:名称
  • 任务描述:描述
  • 任务参数:任务处理时能够获取到的参数(即各个 Processor的process 方法入参 TaskContext 对象的 jobParams 属性)(进行一次处理器开发就能理解了)
  • 定时信息:该任务的触发方式,由下拉框和输入框组成
  • API -> 不需要填写任何参数,表明该任务由 OpenAPI 触发
  • CRON -> 填写 CRON 表达式(在线生成网站[3])
  • 固定频率 -> 填写整数,单位毫秒
  • 固定延迟 -> 填写整数,单位毫秒
  • 工作流 -> 不需要填写任何参数,表明该任务由工作流(workflow)触发

4.2 执行配置

由执行类型(单机、广播和 MapReduce)、处理器类型和处理器参数组成,后两项相互关联。

  • 内置 Java 处理器 -> 填写该处理器的全限定类名(eg,com.github.kfcfans.oms.processors.demo.MapReduceProcessorDemo)
  • Java(容器) -> 填写容器ID#处理器全限定类名(eg,18#com.github.kfcfans.oms.container.DemoProcessor)
  • SHELL -> 填写需要处理的脚本(直接复制文件内容)或脚本下载链接(http://xxx)
  • PYTHON -> 填写完整的 python 脚本或下载链接(http://xxx)

4.3 运行配置

  • 最大实例数:该任务同时执行的数量
  • 单机线程并发数:该实例执行过程中每个 Worker 使用的线程数量(MapReduce 任务生效,其余无论填什么,都只会使用必要的线程数...)
  • 运行时间限制:限定任务的最大运行时间,超时则视为失败,单位毫秒,0 代表不限制超时时间(不建议不限制超时时间)。

4.4 重试配置

  • Instance 重试次数:实例级别,失败了整个任务实例重试,会更换 TaskTracker(本次任务实例的Master节点),代价较大,大型 Map/MapReduce 慎用。
  • Task重试次数:Task 级别,每个子 Task 失败后单独重试,会更换 ProcessorTracker(本次任务实际执行的 Worker 节点),代价较小,推荐使用。
  • 注:请注意同时配置任务重试次数和子任务重试次数之后的重试放大,比如对于单机任务来说,假如任务重试次数和子任务重试次数都配置了 1 且都执行失败,实际执行次数会变成 4 次!推荐任务实例重试配置为 0,子任务重试次数根据实际情况配置。

4.5 机器配置

用来标明允许执行任务的机器状态,避开那些摇摇欲坠的机器,0 代表无任何限制。

  • 最低 CPU 核心数:填写浮点数,CPU 可用核心数小于该值的 Worker 将不会执行该任务。
  • 最低内存(GB):填写浮点数,可用内存小于该值的 Worker 将不会执行该任务。
  • 最低磁盘(GB):填写浮点数,可用磁盘空间小于该值的 Worker 将不会执行该任务。

4.6 集群配置

  • 执行机器地址:指定集群中的某几台机器执行任务(debug 的好帮手),多值英文逗号分割,如192.168.1.1:27777,192.168.1.2:27777
  • 最大执行机器数量:限定调动执行的机器数量

4.7 报警配置

选择任务执行失败后报警通知的对象,需要事先录入。

基础的教程到这里也就结束了~更多功能示例可见官方文档[2],工作流、MapReduce、容器等高级特性等你来探索!

五、总结与预告

本章详细介绍了 PowerJob 的快速入门,根据本文能够快速搭建起本地开发/测试环境。下一章节,我将会对 PowerJob 整体的架构做一个介绍,为后面的技术剖析做准备。

那我们下期再见喽~

作者游记


“常在河边走,哪有不湿鞋”,然而,这句话在茶卡盐湖却属于奢望。

稍有不慎,隐秘的盐窟便对你敞开怀抱,瞬间将你吞噬~

盐湖如此,人生亦是如此。

难免不幸时,也要对着美好的明天微笑~

参考资料

[1]

《讲解开源项目》: https://github.com/HelloGitHub-Team/Article

[2]

官方文档: https://www.yuque.com/powerjob/guidence

[3]

在线生成网站: https://cron.qqe2.com/

关注公众号加入交流群(作者在 Java 群)

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎联系我(微信:xueweihan,备注:讲解)加入我们,让更多人爱上开源、贡献开源~

获取更多信息、“在看”让本文被更多人看到、“赞赏”支持我们。

java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...相关推荐

  1. java word 超链接到文档内部_Java 添加超链接到 Word 文档方法详解

    在Word文档中,超链接是指在特定文本或者图片中插入的能跳转到其他位置或网页的链接,它也是我们在编辑制作Word文档时广泛使用到的功能之一.今天这篇文章就将为大家演示如何使用Free Spire.Do ...

  2. java查询到更新之前的数据_Java对数据库的查询和更新操作详解

    这篇文章主要介绍了使用Java对数据库进行基本的查询和更新操作,是Java入门学习中的基础知识,需要的朋友可以参考下 数据库查询 利用Connection对象的createStatement方法建立S ...

  3. java 两个数组去重复数据_Java实现数组去除重复数据的方法详解

    本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现, ...

  4. java多维数组的反射类型_Java多维数组和Arrays类方法总结详解

    一.数组的三种声明方式总结 public class WhatEver { public static void main(String[] args) { //第一种 例: String[] tes ...

  5. java无参构造赋值怎么没用_Java有参构造方法和无参构造方法详解

    一:有参数构造方法 在之前我们要为一个对象赋值,先要创建好对象之后然后"对象名.属性名"或者调用属性的setter为属性赋值.但是在很多时候觉得这样做很麻烦,最好的做法是在创建对象 ...

  6. java图片填充父容器_java相关:spring的父子容器及配置详解

    java相关:spring的父子容器及配置详解 发布于 2020-5-26| 复制链接 本篇文章主要介绍了spring的父子容器及配置详解,详细的介绍了spring父子容器的概念.使用场景和用法,有兴 ...

  7. java log4j基本配置及日志级别配置详解,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  8. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)

    Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...

  9. SAP S4 MM配置详解之三:物料主数据-定义物料类型/物料状态/字段选择控制/物料组

    1.定义物料类型 概念及功能说明 物料类型是对物料进行分组的一种方式,每一种类型的物料有相同的基本属性,例如原材料.半成品和成品.创建物料主记录时,将物料分配到物料类型.物料类型属于物料的一般数据.控 ...

最新文章

  1. 题目:任意给定一个浮点数,计算这个浮点数的立方根。(基于二分法和牛顿迭代法)(基于Java实现)
  2. matlab 1到无穷_Matlab的实用技巧(一)
  3. Linux下cat命令各种用法
  4. Pytorch实现U-net视网膜血管分割
  5. 【Linux】一步一步学Linux——pwd命令(19)
  6. Ext-ajax请求数据
  7. MTOM以及在WCF中的应用
  8. vue中html没引入js文件,vue.js如何引入非模块化的js文件并调用里面的方法和类。...
  9. Android9怎么剪辑音频,音频剪辑铃声制作
  10. 京东手机登录页面html,京东登录页面.html
  11. 必备技能!聊聊二维码扫码登录的原理
  12. Cartopy绘图入门指南
  13. php gd ttf,linux gd php TTF字体
  14. 如何才能不改变图片的像素大小,只改变图片的文件大小
  15. 怎样把计算机设置到小米手机桌面上,小米自由桌面如何设置和使用【图文教程】...
  16. 关于计算机课的课后感受,计算机课心得体会范文
  17. 【RQNOJ】460 诺诺的队列
  18. Hack The Box - Starting Point - TIER 0
  19. 短视频消重去重九种方法,组合使用原创度更高,各平台轻松过原创
  20. 滤波总结+应用举例1(kalman滤波、序贯滤波、UD分解滤波、遗忘滤波、信息滤波、自适应滤波)(内含matlab代码)

热门文章

  1. Camera系列规格参数
  2. 北汽蓝谷极狐阿尔法S与T
  3. NVIDIA 自动驾驶软件平台
  4. BERT模型的OneFlow实现
  5. 目标检测coco数据集点滴介绍
  6. 2021年大数据Flink(三十五):​​​​​​​Table与SQL ​​​​​​案例二
  7. mysql外键写了会怎么样_mysql使用外键会影响性能吗
  8. python 2x list 里面的中文打印效果为unicode 编码 的处理方法
  9. Android ScrollView 滑动指定的距离
  10. android 防止连点的方法