`
dreamoftch
  • 浏览: 495562 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

xxl-job 学习笔记

阅读更多

问题一:调度器(admin)和执行器(executor)之间如何互相通信?

admin公共spring-mvc提供了一个rest的接口给执行器调用(com.xxl.job.admin.controller.JobApiController#api)。

com.xxl.job.admin.controller.JobApiController#api方法作为执行器调用admin的统一入口,在该方法里面通过反射执行不同的操作(注册,删除注册,回调等),提供给执行器操作的api接口定义在com.xxl.job.core.biz.AdminBiz中。 其中回调主要是更新job的执行时间,执行是否成功等信息。

执行器(executor)启动之后提供给admin调用的入口是启动一个jetty server, 提供给admin操作的api定义在com.xxl.job.core.biz.ExecutorBiz中。

问题二:调度器(admin)和执行器(executor)如何知道彼此的ip端口?

执行器(executor)的配置文件中需要指定调度(admin)的地址

但是调度器(admin)并没有配置执行器的地址,而是通过执行器(executor)启动之后主动定时向调度器(admin)发送注册的心跳请求,请求里面包含了自己的appName和IP端口信息,然后admin将该信息保存到 XXL_JOB_QRTZ_TRIGGER_REGISTRY 表中

问题三:如果执行器有多个实例会怎样?

根据前面的问题二,假如有两个执行器a,b分别启动:

  • 执行器a启动并向admin注册,并告知自己的appName(假如是executor-sample)和ip端口(假如是192.168.15.1:9995)
  • admin保存执行器a的信息到XXL_JOB_QRTZ_TRIGGER_REGISTRY表(executor-sample:192.168.15.1:9995)
  • 执行器b启动并向admin注册,并告知自己的appName(同样是executor-sample)和ip端口(假如是192.168.15.2:9995)
  • admin保存执行器b的信息到XXL_JOB_QRTZ_TRIGGER_REGISTRY表(executor-sample:192.168.15.2:9995)
  • admin有一个后台线程(com.xxl.job.admin.core.thread.JobRegistryMonitorHelper)默认每隔30秒会去 XXL_JOB_QRTZ_TRIGGER_REGISTRY 表中读取有效的执行器注册记录(根据上次心跳时间),即executor-sample:192.168.15.1:9995和executor-sample:192.168.15.2:9995
  • 将appName:executor-sample最新的有效执行器列表保存到 XXL_JOB_QRTZ_TRIGGER_GROUP 表中,即insert一条记录appName:executor-sample, address_list为192.168.15.1:9995,192.168.15.2:9995

有上面的步骤可知,执行器启动的时候立即就会向调度中心admin注册,所以表到XXL_JOB_QRTZ_TRIGGER_REGISTRY中会立即产生注册的记录,但是由于后台任务JobRegistryMonitorHelper是每隔30刷新一次有效的执行器地址的,所以,从一台执行器启动并注册,到调度中心admin感知到该执行器的存在,会有一定时间的延迟。

经过以上的步骤,调度中心admin就可以维护起每个应用的有效的地址列表

那如果有一个定时任务需要执行的话,会分配到哪个执行器执行呢?

这就取决于我们在admin系统的任务管理页面配置任务的方式了,xxl-job支持多种路由策略(ExecutorRouteStrategyEnum):

  • 第一个(admin保存执行器地址的时候会按照字典排序,取第一个)
  • 最后一个(admin保存执行器地址的时候会按照字典排序,取最后一个)
  • 轮询
  • 随机
  • 一致性hash
  • 最不经常使用
  • 故障转移(会发循环发送实时的请求给每个执行器直到找到一台请求成功的机器为止)
  • 忙碌转移(和故障转移步骤类似,不同的是这里发送给执行器的请求是查询该机器是否空闲的请求) 等等。

xxl-job同样支持调度器(admin)集群,只要在执行器里面配置的时候配置多个admin的地址,用逗号分隔即可。 // TODO 如果启动了多个admin,xxl-job是如何避免重复调度任务呢?

问题四:xxl-job内部是如何调度任务的呢?

xxl-job内部添加-更新-删除任务是通过 XxlJobDynamicScheduler 的addJob, removeJob, updateJobCron来实现的, 其中比较有代表性的就是addJob了:

添加job的时候,xxl-job内部固定的制定job的bean类为RemoteHttpJobBean,也就是说不管这个任务的具体内容是什么,xxl-job都是通过RemoteHttpJobBean作为入口来实现的,RemoteHttpJobBean里面通过当前执行的任务的jobKey得到jobId(jobKey的name其实就是jobId)从而实现动态的调用具体的任务。

分享到:
评论

相关推荐

    将 xxl-job-admin、xxl-job-core、xxl-job-executor 的源码引入项目中.docx

    ### 将xxl-job-admin、xxl-job-core、xxl-job-executor的源码引入项目中的实践 在探讨如何将这三个组件(xxl-job-admin、xxl-job-core、xxl-job-executor)有效地引入到项目中之前,我们需要先了解它们各自的作用及...

    分布式调度xxl-job

    * 文字笔记:XXL-Job的学习形式包括文字笔记。 * 原理分析:XXL-Job的学习形式包括原理分析。 * 交互流程图:XXL-Job的学习形式包括交互流程图。 知识点五:XXL-Job的应用案例 * 虎牙:XXL-Job的应用案例包括虎牙...

    xxl-job适配达梦数据库

    XXL-JOB是一款轻量级分布式任务调度平台,它提供了简单易用的API接口和Web管理界面,使得开发者可以方便地实现任务的分布式调度。在本案例中,我们关注的是如何将XXL-JOB与达梦数据库(DM8)进行适配。达梦数据库...

    xxl-job-admin-2.4.1-SNAPSHOT之oracle版

    XXL-JOB是一个分布式任务调度平台,主要由两部分组成:调度中心(xxl-job-admin)和执行器(xxl-job-executor)。本资源“xxl-job-admin-2.4.1-SNAPSHOT”是针对Oracle数据库的版本,意味着它已经配置好与Oracle...

    xxl-job-admin-2.3.0-SNAPSHOT

    XXL-JOB是一个分布式任务调度平台,主要特点在于其易用性和灵活性,广泛应用于各种复杂的分布式系统中。标题"xxl-job-admin-2.3.0-SNAPSHOT"表明这是XXL-JOB的一个版本,具体为2.3.0的Snapshot版本,通常Snapshot...

    xxl-job本地jar包

    7. **文件内容**:"xxl-job-mine"可能包含了XXL-JOB的配置文件、启动脚本、示例任务代码等,这些文件将帮助用户理解如何在本地配置和运行XXL-JOB,并且通过提供的示例,可以学习如何编写和注册任务。 8. **监控与...

    xxl-job-2.3.0.rar

    对于"xxl-job-2.3.0"的源码部分,我们可以深入学习其设计思想和实现机制,例如调度算法、任务分发策略、分布式协调机制等。这有助于我们理解如何构建一个稳定、高效的分布式调度系统。 总结一下,XXL-JOB是一个功能...

    xxl-job-core-2.3.0-API文档-中文版.zip

    赠送jar包:xxl-job-core-2.3.0.jar 赠送原API文档:xxl-job-core-2.3.0-javadoc.jar 赠送源代码:xxl-job-core-2.3.0-sources.jar 包含翻译后的API文档:xxl-job-core-2.3.0-javadoc-API文档-中文(简体)版.zip ...

    xxl-job适配了postgresql数据库,xxl-job版本是2.4.1,修改了官方的源代码

    xxl-job适配了postgresql数据库,xxl-job版本是2.4.1,修改了官方的源代码。同时支持mysql和postgresql两种数据库,根据配置文件选择数据库,文件里面包含了两种数据库的建库脚本。

    xxl-job oracle 适配版本

    XXL-JOB是一款轻量级分布式任务调度平台,它提供了简单易用的Web管理界面,支持灵活的任务配置和丰富的调度策略。在这个“xxl-job oracle 适配版本”中,我们主要关注的是XXL-JOB如何与Oracle数据库进行集成和优化。...

    XXL-JOB金仓版

    XXL-JOB是一款开源的任务调度框架,由xuxueli开发,主要应用于分布式系统中的任务调度。金仓数据库,又称为Kingbase,是中国自主研发的一款高性能、高可用的关系型数据库管理系统,常用于对数据处理性能有较高要求的...

    xxl-job-2.2.0-pg集成nacos配置管理,可直接运行

    XXL-JOB是一个分布式任务调度平台,主要由两部分组成:调度中心(XXL-JOB-ADMIN)和执行器(XXL-JOB-EXECUTOR)。在这个2.2.0-pg版本中,它集成了PostgreSQL数据库以及Nacos作为配置管理服务,提供了更加便捷和灵活...

    xxl-job-core-2.3.0-API文档-中英对照版.zip

    赠送jar包:xxl-job-core-2.3.0.jar; 赠送原API文档:xxl-job-core-2.3.0-javadoc.jar; 赠送源代码:xxl-job-core-2.3.0-sources.jar; 赠送Maven依赖信息文件:xxl-job-core-2.3.0.pom; 包含翻译后的API文档:...

    xxl-job-2.2.0.zip

    XXL-JOB是一个分布式任务调度平台,其2.2.0版本包含了大量的功能改进和优化。这个源码压缩包提供了一个深入理解XXL-JOB工作原理的机会,对于开发者来说是宝贵的资源,尤其对于那些需要自定义扩展或者进行二次开发的...

    XXL-JOB分布式任务调度系统培训PPT

    "XXL-JOB分布式任务调度系统培训PPT" XXL-JOB分布式任务调度系统是当前 Java 生态中的一种流行的分布式任务调度系统。它提供了多种功能特性,如支持 cron 表达式、支持多种任务类型、支持任务优先级、支持任务依赖...

    分布式调度任务XXL-JOB架构图

    14. XXL-JOB架构图版本:XXL-JOB架构图版本是XXL-JOB架构图中的版本管理模块,负责管理和维护XXL-JOB架构图的版本。 15. 分片任务执行器:分片任务执行器是XXL-JOB架构图中的任务执行器,负责执行分片任务。 16. ...

    定时调度器 xxl-job

    在这个压缩包中,你将找到xxl-job的核心组件——xxl-job-admin以及一个执行器的示例项目——xxl-job-demojob。 1. **xxl-job-admin**:这是xxl-job的调度中心,主要负责任务的管理和调度。它包含以下几个核心功能:...

    xxl-job-executor-go-master

    XXL-JOB是一个分布式任务调度平台,而"xxl-job-executor-go-master"则表示这个项目是XXL-JOB的Go语言实现版本的源码仓库。这个仓库是针对XXL-JOB执行器的一个Go语言实现,它使得开发者可以利用Go语言来编写调度任务...

    xxl-job分布式任务调度平台 v2.4.0.zip

    - 对于学习者来说,xxl-job-2.4.0源码提供了深入理解分布式调度机制的机会。 - 通过阅读源码,可以了解到任务调度的算法实现、执行器的注册与发现、任务状态的同步等关键功能的细节。 7. **毕业设计与论文研究**...

    xxl-job-nacos改造版

    xxl-job改造使用nacos注册中心。 改造过程见https://blog.csdn.net/gsls200808/article/details/133956977 改造后,调度器使用执行器服务名即可找到执行器,... 文件夹里xxl-job-2.4.0 为调度器,xxl-job-demo为执行器

Global site tag (gtag.js) - Google Analytics