前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >任务调度平台只会Quartz?让本小妹来带你飞~

任务调度平台只会Quartz?让本小妹来带你飞~

作者头像
永恒君
发布2022-12-06 15:34:48
5820
发布2022-12-06 15:34:48
举报
文章被收录于专栏:开源小分队开源小分队

大家好,我是人见人爱,花见花开的开源小妹。今天我来给大家分享一个超好用的分布式任务调度平台:XXL-JOB。

一、背景

事情的起因是这样滴:最近公司项目需要改革,找出之前项目的痛点,然后对症下药。本来我以为没有本小妹什么事呢,结果。。。不说了,直接上图。

你们也看到了,这篇文章是怎么来的啦,哈哈。

二、和Quartz的对比

既然我们公司之前用的是Quartz,但是现在要换了它,那么我们就来看看Quartz哪里不好,同时也看看XXL-JOB好在哪里。

Quartz的不足

  • 问题一:调用API的方式操作任务,不人性化;
  • 问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重;
  • 问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务;
  • 问题四:quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。

XXL-JOB的特性

  • 简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手
  • 动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效
  • 调度中心HA(中心式):调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群部署,可保证调度中心HA 执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA
  • 注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址
  • 弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务
  • 路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等
  • 故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求
  • 阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度
  • 任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务
  • 任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试
  • 任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式
  • 分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务 ... XXL-JOB的优点有点太多了呢,哈哈,我是不是有点喜新厌旧了呢。

三、快速入门

看到这么多优点,你们是不是也有点迫不及待了呢?不要急,不要慌,待本小妹慢慢带你们入门。

下载项目,源代码地址为:略略略,容本小妹卖个关子,一会告诉你们源码地址,下载完成之后直接使用maven进行编译即可;

源代码结构如下:

快夸我贴心,源码的用处我都给标出来啦。

初始化数据库,直接执行自带的数据库脚本即可,就不用本小妹多说啦

部署任务调度中心项目xxl-job-admin

该项目的作用是:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

修改配置文件: xxl-job-admin/src/main/resources/application.properties,一般修改下数据库连接地址即可

部署启动项目:以上配置正确,直接编译启动项目即可

项目访问地址为:http://localhost:9080/xxl-job-admin (由于我这里8080端口被占用了,因此我换成了8090端口,嘻嘻)

登录系统: 用户名密码为:admin/123456

首页图如下

至此,“任务调度中心管理系统”已部署成功。还不要高兴的太早哦,这刚刚完成了一半。

部署执行器项目

可以使用作者提供的实例项目:

也可以集成到现有的项目中。这里我要集成到自己已有的服务中。(又得夸我一波了)

步骤一:引入依赖

代码语言:javascript
复制
<dependency>
  <groupId>com.xuxueli</groupId>
  <artifactId>xxl-job-core</artifactId>
  <version>2.3.0</version>
</dependency>

步骤二:添加执行器的配置信息

可以copy【xxl-job-executor-sample-springboot】项目中的配置文件,放到自己项目下,做一些相应的修改

步骤三:执行器组件配置

可以copy示例代码中的配置文件到自己项目中,配置位置为:

步骤四:执行执行器项目

上述配置完成之后,可以直接执行项目的主启动类,以启动执行器。

开发定时任务

步骤一:代码的编写

步骤二:在任务调度中心添加任务

保存后效果如下:

启动“调度中心”和“定时器”执行任务

至此,XXL-JOB的快速入门已经完成。

四、效果图展示

我还贴心的为大家准备了系统的截图哦~~

1.运行报表(首页)

在首页可以查看任务的总体情况,包括任务个数,总调度次数等等

2.任务管理

对所有定时任务进行一个统一管理,定时任务是依赖于执行器的,一个执行器包含多个定时任务

3.调度日志

查看定时任务的执行情况,包含成功失败等情况,失败的可以查看失败原因

4.执行器管理

管理执行器,可以类比微服务中,服务注册中心对于注册到该中心的微服务的管理

5.用户管理

五、系统架构

  • 该系统主要分为调度中心和执行器两部分,主要采用了微服务中的服务注册管理的思想
  • 执行器包含了任务线程,任务信息等
  • 调度中心则主要是对所有任务的统一调度管理,类似服务注册中心对于微服务的管理

该系统和微服务中的服务注册中心的思想非常类似,几个关键组件的关系如下图所示:

六、总结

目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等....

而我们公司在最近也接入了该项目,确实解决了之前定时任务使用的一些痛点,而且效果也很乐观,所以如果你也在寻找分布式任务调度系统的话,这个框架可以是一个不错的选择,感兴趣的同学可以去了解下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源小分队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、和Quartz的对比
    • Quartz的不足
      • XXL-JOB的特性
      • 三、快速入门
      • 四、效果图展示
        • 1.运行报表(首页)
          • 2.任务管理
            • 3.调度日志
              • 4.执行器管理
                • 5.用户管理
                • 五、系统架构
                • 六、总结
                相关产品与服务
                服务网格
                服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档