专栏首页匠心独运的博客分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢? 如果在生产环境的大规模服务器集群上部署了集成Elastic-Job的业务工程,而没有相应的运维监控工具可以来监控定时任务执行状态和动态修改定时任务执行时间,修改相应的配置还得手动更新数据库或者配置文件,那么则会给运维和研发工程师增添不少麻烦。使用过Quartz集群方案的同学应该都有过同样的感触,修改定时任务执行时间配置和监控任务的状态都比较麻烦,想要一个功能齐全的监控运维平台还得自己专门来开发。所幸的是,Elastic-Job开源社区很早就考虑到该问题,在项目发布初期即提供了一个功能相对齐全的Elastic-Job运维监控console平台。

一、Elastic-Job-Console的介绍

从前面一篇文章《分布式定时任务Elastic-Job在SpringBoot工程中实践方法(一)》中提到的Elastic-Job分布式协调框架的系统架构图(如下)可以看出运维平台—Elastic-Job-Console项目也是Elastic-Job项目中必不可少的一个重要部分。

Elasitc-Job架构图.jpg

Elastic-Job-Console以Web的方式向运维和开发人员提供监控、更改配置和暂停/启动定时任务的服务。从上面的架构上来看,console平台并没有和Elastic-Job-Lite发生直接的关联,而是借助ZooKeeper作业注册中心和 Elastic-job-lite关联起来了。下面主要列举了Elastic-Job-Console运维监控平台具备的主要功能: (1)登录安全控制 (2)注册中心管理 (3)定时任务维度状态查看 (4)服务器维度状态查看 (5)快捷修改定时任务配置(Cron表达式、作业分片总数、分片序列号、是否支持失效转移和是否支持错过重执行) (6)控制任务的暂停和恢复运行

二、Elastic-Job-Console监控控制平台的实践

1、版本环境准备

JDK 1.8、Maven 3.3.9、Elastic-Job-Lite 2.1.5、Zookeeper 3.4.6。

2、下载Elastic-Job开源项目的源码

Elasitc-Job开源项目在git-hub上的地址为:https://github.com/elasticjob/elastic-job-lite;由于需要在自己本地重新构建Elastic-Job-Console项目,所以有必要下载其源代码至本地。此外,任何一款优秀的开源组件均值得我们去学习和借鉴,只有不断地一遍一遍去撸源码,才能真正做到“知其然知其所以然”,最后才可以参与开源社区为其贡献自己的代码。

3、Maven构建Elastic-Job-Console

将当前目录切换至下载Elastic-Job项目的根目录下,并在Cmd窗口中运行以下的maven构建命令即可编译构建Elastic-Job项目。

//Maven编译构建命令
mvn clean install -Dmaven.test.skip=true  

编译构建后的截图如下:

Elastic_Job-Console运维控制台maven构建成功截图img.png

4、启动Elastic-Job-Console平台

使用maven编译构建成功后在“{本地路径}\elastic-job-lite\elastic-job-lite-console\target”路径下会生成一个名为“elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz”的压缩包,解压后即可使用。解压后的文件bin目录中,有两个脚本,“start.bat”是windows环境下使用;“start.sh”是linux环境下使用。 在conf目录中,可以修改auth.properties文件中的登录名/密码来进行安全认证。该文件的内容如下:

root.username=root
root.password=root
guest.username=guest
guest.password=guest

以windows环境为例,双击“start.bat”脚本即可启动Elastic-Job-Console运维监控平台。从该脚本中可以看到默认启动运行的端口为:8899。

@echo off
if ""%1"" == ""-p"" goto doSetPort
if ""%1"" == """" goto doStart

echo Usage:  %0 [OPTIONS]
echo   -p [port]          Server port (default: 8899)
goto end
:doSetPort
shift
set PORT=%1

:doStart
set CFG_DIR=%~dp0%..
set CLASSPATH=%CFG_DIR%
set CLASSPATH=%~dp0..\lib\*;%CLASSPATH%
set CONSOLE_MAIN=io.elasticjob.lite.console.ConsoleBootstrap
echo on
if ""%PORT%"" == """" set PORT=8899
java  -cp "%CLASSPATH%" %CONSOLE_MAIN% %PORT%

:end

启动后的日志如下图所示:

elastic-job-console启动后的日志.png

5、使用Elastic-Job-Console平台管理分片任务

在本地开启浏览器访问“localhost:8899”地址,使用前面在配置文件中设置的用户名和密码(默认为root/root)即可登录上Elastic-Job-Console平台。设置完Zookeeper作业中心的IP地址,端口和命名空间后即可对部署的Elastic-Job分片定时任务进行监控和管理了。

elasic_job_console_web控制台的截图.png

在“作业维度”一栏中可以看到当前在测试环境中跑的示例分片定时任务的各个属性(如作业名称、分片总数、Cron定时任务表达式和状态)以及管理分片任务的操作按钮等。

elasic_job_console_web控制台的截图.png

在“服务器维度”一栏中可以看到,分片定时任务的运行实例,在该示例中,分片定时任务的实例分别在两台虚拟机上跑,并且当前运行状态均正常。通过最后一列的操作按钮,可以对每个分片定时任务实例进行终止、失效和查看详情的操作。

elasic_job_console_web控制台的截图.png

通过Elastic-Job-Console提供的Web页面,可以根据实际的线上业务情况对业务工程中的分片定时任务进行一些动态的调整,比如大家比较关注的定时任务执行间隔时间,定时任务分片总数、是否支持自动失效转移。通过选择“作业维度”中的定时任务的“修改”按钮,就可以调整下定时任务的一些属性了。下面主要展示了修改定时任务的执行间隔时间:

elasic_job_console_web控制台的截图.png

从图中可以看出原来原来分片定时任务的执行时间间隔为每10S运行一次,通过在页面上修改定时任务的Cron时间表达式,即可完成对定时任务的更改配置。修改后的Web页面和日志截图分别如下:

修改定时任务时间间隔后的elasic_job_console_web控制台的截图.png

elastic_job修改定时任务的cronz时间间隔后的console控制台的截图.png

elastic_job修改定时任务的cronz时间间隔后的日志截图1.png

elastic_job修改定时任务的cronz时间间隔后的日志截图2.png

从上面的Elastic-Job分片定时任务的日志截图中即可看出,部署在两台机器上的两个分片定时任务的执行间隔时间均发生了改变,都由原来的10S变成了20S。在Quarz集群中,原本需要修改配置文件或者DB才能完成更改定时任务属性,而现在只需要在Console平台的Web页面上设置下即可完成分片定时任务的动态属性配置,是不是挺方便的呢?

四、总结

本文主要介绍了基于开源的分布式弹性定时任务调度框架—Elastic-Job的运维监控平台—Elastic-Job-Console的功能介绍和实践方法。由于文章篇幅的原因,本文无法对Elastic-Job框架的一些细节和源码无法进行更为细致的阐述,作者将在后面Elastic-Job框架的源码系列文章中继续逐一进行介绍。同时,限于笔者的才疏学浅,对本文内容可能还有理解不到位的地方,如有阐述不合理之处还望留言一起探讨。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(一)

    摘要:如何构建具备作业分片和弹性扩缩容的定时任务系统是每个大型业务系统在设计时需要考虑的重要问题? 对于构建一般的业务系统来说,使用Quartz或者Sprin...

    用户2991389
  • 缓存那些事儿之【本地缓存篇】

    一般来说,一个业务平台系统的整体流程可以基本概括为如下图所示,用户请求从UI(浏览器或者客户端)到网络转发,经过应用服务的业务逻辑处理,再到存储(文件系统或数据...

    用户2991389
  • 消息中间件—RocketMQ消息存储(二)一、RocketMQ存储整体设计架构回顾二、RocketMQ存储关键技术—再谈Mmap与PageCache三、RocketMQ存储优化技术四、RocketMQ

    文章摘要:上篇中主要介绍了RocketMQ存储部分的整体架构设计,本篇将深入分析RocketMQ存储部分的细节内容 在本篇文章中,小编将继续深入分析与介绍Ro...

    用户2991389
  • 分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(一)

    摘要:如何构建具备作业分片和弹性扩缩容的定时任务系统是每个大型业务系统在设计时需要考虑的重要问题? 对于构建一般的业务系统来说,使用Quartz或者Sprin...

    用户2991389
  • 【程序源代码】Oracle19c修改字符集操作

    昨天安装了个oracle19c,但在导入数据库时发现原来数据库的字符集设置错了,导致数据库文件无法正常导入并还原。今天又折腾了一半天查找如果修改oracle的字...

    程序源代码
  • 我的数据访问类(第二版)—— for .net2.0 (二)

    下面写一下相对来说不变的地方 SQL语句部分,改成了静态函数的形式。 using System; using System.Collections.Generi...

    用户1174620
  • 修改tomcat 发布war大小限制

    Java学习123
  • 封装好的MAP工具类和HBASE工具类

    package cn.gulf.util; import java.util.Collection; import java.util.HashMap; im...

    用户1220053
  • [deepin][linux][bee]deepin关闭bee,在按键盘删除键删到顶端会毕一声,wineQQ里面尤其明显

    将这条命令加入启动文件, 例如 ~/.xinitrc, 可以在每次X启动时关掉PC喇叭.

    landv
  • scRNA-seq Clustering

    现在我们已经有了整合的高质量的细胞,我们想知道我们的细胞群体中存在的不同细胞类型。

    生信技能树jimmy

扫码关注云+社区

领取腾讯云代金券