首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从简单到复杂学习任务调度(2)-xxl-job基本原理和使用

从简单到复杂学习任务调度(2)-xxl-job基本原理和使用

作者头像
小四的技术之旅
发布于 2023-03-02 11:06:49
发布于 2023-03-02 11:06:49
2.2K0
举报

前言

上一篇对Java层面提供的以及和Spring提供的任务调度方式有了一定的了解,也分析出了它们的弊端,不过学习它们还是很有必要的,因为任务调度机制的思想和这些类差不多,只不过一个功能强大的任务调度工具会额外添加很多功能,使其更加灵活,更加全面,更加可控,比如Timer类会使用TaskQueue来存储任务,TimerThread获取到的TimerTask总是最先执行的任务,是因为TimerQueue是一个最小堆,它会将最先执行的任务放在堆顶,然后按照时间顺序进行排序,而在xxl-job中,会有一个守护线程去扫描数据库,获取可执行的任务,然后根据此任务的一些配置去解析出此任务的调度方式。

从简单到复杂学习任务调度(1)

简介

xxl-job是一个简单,开源的轻量级分布式任务调度系统,提供web界面进行任务的CRUD,并能对任务的触发策略,负载均衡策略,重试策略,等等进行动态配置,xxl-job支持调度中心和触发器分布式部署,提高了系统的高可用性,xxl-job的特性比较多,就不一一列举,有兴趣的可以去官网看看。

在学习它之前,我们需要了解它的几个概念。

执行器

顾名思义,就是执行任务的东西,执行器就是我们写的代码,需要执行的任务,一般我们会将执行器独立为一个服务,多个执行器就是多个服务,将业务代码和执行器分离开来,通过rpc接口进行通信,这样做方便进行统一的管理。

调度中心

调度中心就是负责对任务进行管理,调度,监控任务状态等等,调度中心并不负责具体业务的实现,调度中心就是xxl-job的内核。

使用xxl-job

对于使用xxl-job,我们只需要了解执行器和调度中心即可,下面我们从xxl-job的可视化界面去逐步说明各个选项的作用。

执行器管理

如下是执行器列表,可见我们有两个执行器,其中一个执行器liu-job有两个实例,OnLine机器地址为2,在xxl-job中,执行器叫做AppName,这就相当于我们微服务中的服务名称,我们可以在执行器项目的properties文件中指明,此处注册执行器,其实和我们使用Nacos,Zookeeper,Eureka作为注册中心是一样的,只是xxl-job使用MySQL作为注册中心。

任务管理

如下是任务列表,它通过执行器来隔离,每个执行器下面的任务和其他执行器下的任务是隔离的。

新增任务

如下是新增任务,我们挑选一些选项来说明。

调度类型

调度类型分为两种,一种是基于CRON表达式,一种是固定速度,CRON表达式能够更加灵活的配置任务的执行时间,比如可以指定每天晚上的10点,11点,11点半执行任务,而固定速度则是以时间间隔为单位,然后反复地执行。

运行模式

运行模式分为两种,一种是BEAN,一种是GLUE

BEAN模式

BEAN就是需要我们在执行器中写代码,以JobHandler的形式存在,所以BEAN模式我们会使用@XxlJob注解标注在任务上,xxl-job依赖于Spring管理这些Bean。

GLUE模式

而GLUE模式不需要我们在执行器里面写代码,也就是说我们不需要在执行器里面编码实现任务,但是不代表不用写代码,依然需要写代码,这样做的好处是不需要更新代码,就能实现任务的动态添加,比如我们需要临时加一个任务去更新去更新数据,但是服务现在正在运行,不能停掉,那么我们就可以在本地调试好代码,然后再Web IDE上输入代码,需要继承IJobHandler,那么任务就能在不更新代码的情况下执行,其原理是使用groovy来对代码进行解析,然后调用。

路由策略

路由策略属于高级模式,只有我们的执行器是多实例部署时,才会使用到此配置,实际上就是负载均衡策略,只是叫法不一样,xxl-job的路由策略有很多种。

第一个:无论有多少机器,固定选择第一个机器

最后一个:固定选择最后一个机器

轮询:每个机器都能得到公平的执行,所得到的份额都一样

随机:随机选择在线的一个机器

一致性HASH:每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。

最不经常使用:使用频率最低的机器优先被选举

最近最久未使用:最久未使用的机器优先被选举

故障转移:按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度,如果此机器故障,那么就会切换到正常的机器上。

忙碌转移:按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度

分片广播:广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数,可根据分片参数开发分片任务

还有其他的选项,如子任务,子任务会在主任务执行成功后执行,任务超时时间,任务在指定的时间内没完成,那么就会中断任务,失败重试次数,如果任务执行失败,那么会根据其失败重试次数对任务进行重新执行,其他选项就不一一说了。

日志和报表

xxl-job会对任务次数,执行日志进行统计,我们能够直观地进行查看。

总结

今天只对xxl-job的使用和一些配置选项进行说明,只有清楚其框架的组成部分,使用起来才能够得心应手,如果连基本的组件都不清楚,就想去看源码,那么就是“为了看源码而去看源码”,看源码的目的是理解设计者的匠心,思想,如果连调度中心是干什么的都不清楚,执行器是什么角色都不清楚,那么度源码的意义何在。

xxl-job使用起来还是很简单的,其设计也是大道至简,只依赖MySQL,并没有依赖其他中间件,所以称得上是轻量级的分布式任务调度框架。

今天的分享就到这里,感谢你的观看,我们下期见!

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

本文分享自 刘牌 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式任务调度平台XXL-JOB搭建教程
  关于分布式任务调度平台XXL-JOB,其实作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里我就不做过多的介绍了,关于其搭建教程,本人依照其文档搭建起来基本上也没遇到啥问题,这里通过博客的形式记录下来。
IT可乐
2019/05/29
2.4K0
分布式任务调度平台XXL-JOB搭建教程
快速学习-XXL-JOB任务详解
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 “BEAN模式”,JobHandler属性填写任务注解“@XxlJob”中定义的值;
cwl_java
2020/09/24
3.6K0
快速学习-XXL-JOB任务详解
分布式任务调度平台XXL-JOB
XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
用户1518699
2018/09/12
4.3K0
分布式任务调度平台XXL-JOB
分布式任务调度xxl-job
在单机应用时期,任务调度一般都是基于spring schedule和集成quartz来实现的,当系统发展成分布式服务,应用多实例的时候,任务就会出现多次调用的问题,很多时候我们任务并不需要跑多次。解决方案有很多,最最简单粗暴的就是可以设置应用开关。其次就是集中式话任务管理调度。当然,quartz也有集群模式,但是基于api控制并不直观。下面介绍一个集中式的分布式任务调度框架,可以很方便的解决分布式任务调度的问题
kl博主
2023/11/18
4730
分布式任务调度框架XXL-JOB入门级教程
下载源码导入idea,源码地址:https://gitee.com/xuxueli0323/xxl-job.git
小熊学Java
2023/07/16
1.4K0
分布式任务调度框架XXL-JOB入门级教程
spring boot项目整合xxl-job
关于分布式任务调度平台XXL-JOB,作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里就不做过多的介绍了。按照文档搭建xxl-job,做此记录。
BUG弄潮儿
2020/06/29
4.2K0
「02」xxl-job – 定时任务调度框架 – 开源项目
任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 "执行器管理" 进行设置;
收心
2022/12/28
1.1K0
【黑马头条】day20—xxl-job
当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。
陶然同学
2023/04/02
7180
【黑马头条】day20—xxl-job
分布式调度XXL-JOB特性介绍
最近居家办公,对于分布式调度的XXL-JOB开源组件进行了了解和学习,后期会持续分享关于分布式调度的文章,对于新手可以学习和了解如何使用分布式调度,对于已经在使用分布式调度的同学,可以思考一下自己在使用过程中,是否有遇到什么问题,自己如何解决的,也欢迎大家一起探讨。
xdd
2022/07/12
8610
分布式任务调度平台 XXL-JOB 2.0.0 发布
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
Debian中国
2018/12/21
1.1K1
任务调度-分布式任务调度平台XXL-JOB
如果上述二种方式都不满足你的需求,我建议你尝试使用XXL-JOB或其他开源调度平台。
秋日芒草
2019/06/19
2.8K0
xxl-job【后端专题】
xxl-job-admin目录配置文件 application.properties
高大北
2022/11/14
8221
xxl-job【后端专题】
springboot整合xxl-job 分布式任务调度
注意:调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例,如果mysql做主从,调度中心集群节点务必强制走主库
用户10125653
2022/11/10
1.3K0
springboot整合xxl-job 分布式任务调度
分布式调度XXL-JOB
在业务类中方法中贴上这个注解,然后在启动类上贴上@EnableScheduling注解
yuanshuai
2023/11/17
3590
分布式调度XXL-JOB
XXL-JOB定时任务调度平台原理
elastic-job 是由当当网基于quartz 二次开发之后的分布式调度解决方案 , 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。
chenchenchen
2021/09/06
5.3K0
分布式任务调度平台XXL-JOB
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
我没有三颗心脏
2019/10/08
2.4K0
分布式任务调度平台XXL-JOB
一文读懂分布式任务调度平台XXL-JOB
本文主要介绍分布式任务调度平台XXL-JOB(v2.1.0版本),包括功能特性、实现原理、优缺点、同类框架比较等
用户5397975
2019/10/13
3.7K0
分布式任务调度平台XXL-JOB,不了解一下?
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
Bug开发工程师
2019/12/05
1.3K0
【进阶之路】定时任务调用平台xxl-job
.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:30px;margin-bottom:5px}.markdown-body h2{padding-bottom:12px;font-size:24px;border-bottom:1px solid #ececec}.markdown-body h3{font-size:18px;padding-bottom:0}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:15px}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:100%}.markdown-body hr{border:none;border-top:1px solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:#0269c8;border-bottom:1px solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding:12px 7px;line-height:24px}.markdown-body td{min-width:120px}.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block;content:""}.markdown-body blockquote>p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body
南橘
2021/04/02
1.1K0
【进阶之路】定时任务调用平台xxl-job
分布式任务调度利器—Xxl-job框架详解
近期开发中的功能中需要用到定时任务来做数据库的备份和文件的定时删除,所以调研了当前比较主流的几个定时任务框架,经过对比选定了今天要讲的xxl-job,所以这篇文章,我主要和大家分享一下xxl-job的学习总结,记录一下在分布式项目下如何优雅的使用xxl-job实现定时任务。
灰小猿
2024/05/25
33.4K0
分布式任务调度利器—Xxl-job框架详解
相关推荐
分布式任务调度平台XXL-JOB搭建教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档