首页 > 其他分享 >剖析xxl-job任务调度及高可用机制

剖析xxl-job任务调度及高可用机制

时间:2024-11-02 21:57:26浏览次数:3  
标签:执行器 可用 admin 任务 job 任务调度 xxl

xxl-job任务执行器调度的实现机制

整体上来讲,就是在xxl-job-admin中通过调用任务执行器的HTTP接口,实现对任务执行器的调度。
具体又可以分为2个层面进行剖析,如下:

任务执行器侧:

当在项目中引入xxl-job-core组件之后,如果是在Spring容器环境中,会通过XxlJobSpringExecutor组件的afterSingletonsInstantiated()方法做如下2件事情:
第一步,解析使用了@XxlJob注解的任务执行器方法,并保存到一个HashMap结构中,Key为@XxlJob注解的value(),值为MethodJobHandler对象。
第二步,启动一个内置的http服务器(基于Netty框架实现),这样就可以确保xxl-job-admin能够通过HTTP方法调用的方式访问到任务执行器,并通过解析HTTP参数的方式找到在第一步中解析并保存起来的任务执行器方法并执行。

任务调度中心侧:

通过XxlJobScheduler实现对任务执行器数据的读取并调用,本质上是调用任务执行器暴露的HTTP方法,当同时存在多个任务执行器时,需要实现对任务执行器的调度选择,通过ExecutorRouter来实现。

xxl-job高可用实现原理

xxl-job-admin的高可用通过部署多实例来实现,当部署多实例之后如何确保同时只有一个admin实例会发起调度呢?使用了MySQL数据库的悲观锁机制,详见:JobScheduleHelper.start()方法。
任务执行器的高可用也是通过部署多实例来实现,当任务执行器也部署多实例之后如何确保同时只会调度到一个执行器上呢?在xxl-job-admin是通过不同ExecutorRouter组件实现来控制的,以ExecutorRouteFirst为例,总是返回执行器列表中的第一个:

public class ExecutorRouteFirst extends ExecutorRouter {

    @Override
    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList){
        return new ReturnT<String>(addressList.get(0)); // 总是返回执行器列表中的第一个 
    }

}

关于在xxl-job-admin中对任务执行器的调度控制,详见:XxlJobTrigger.processTrigger()方法。

【参考】
XXL-JOB调度中心HA及高可用方案
XXL-Job高可用集群搭建
xxl-job高可用部署
xxl-job 实现高可用
3千字带你搞懂XXL-JOB任务调度平台
MySQL的SELECT ...for update

标签:执行器,可用,admin,任务,job,任务调度,xxl
From: https://www.cnblogs.com/nuccch/p/18522549

相关文章

  • IT界的大神-003- 史蒂夫·乔布斯 (Steve Jobs)
     史蒂夫·乔布斯(SteveJobs)史蒂夫·乔布斯(SteveJobs)是现代商业史上的杰出人物之一 |生平简介-出生与早年:乔布斯于1955年2月24日出生于美国加利福尼亚州旧金山。他是一个私生子,被保罗和克拉拉·乔布斯领养长大。乔布斯在1972年高中毕业后入读俄勒冈州波特兰的里德......
  • 手把手教你精通使用xxljob
    XXL-JOB是一个分布式任务调度平台,以下是其基本的使用方法XXL-JOB是一个轻量级、高效且易于使用的分布式任务调度框架,它由大众点评的许雪里(XXL)开源,旨在解决分布式环境下定时任务的执行难题。以下是XXL-JOB的一些核心特性和应用场景的详细介绍:1.基本介绍XXL-JOB起源于大众......
  • xxl-job分布式定时任务
    xxl-job分布式定时任务官方定义:xxl-job是一个开源的分布式任务调度平台。它的核心设计目标是开发迅速、学习简单、轻量级、易扩展。主要由调度中心和执行器两部分组成,调度中心负责管理调度信息,执行器负责接收调度请求并执行任务逻辑。主要特点:简单易用:支持通过web页......
  • 题解:CF1666J Job Lookup
    被迫来写篇题解。首先,第一个要求我们只需要在递归构造的时候保证子树对应区间连续即可,现在考虑第二个要求。就题目中的二叉树而言,想要确定其结构,我们只需要关注这段区间,即这棵子树根节点的编号,又因为子树区间连续,所以我们不难想到区间动态规划。设\(dp_{l,r}\)表示\(l\simr......
  • 鸿蒙案例实践:图像处理应用中多线程任务调度与性能优化
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。1.项目需求与目标分析背景:图像处理......
  • oracle数据库---PL/SQL、存储函数、存储过程、触发器、定时器job、备份
    PL/SQL什么是PL/SQLPL/SQL(Procedure Language/SQL)是Oracle对sql语言的过程化扩展,指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单......
  • [linux]: job(百度ai)
    [linux]:job(百度ai)  说明:本文由【百度ai】生成,本人整理。    ‌一、Job概述: 在Linux中,job是指通过shell提交的一个任务或命令的执行实例。‌当一个命令通过shell提交执行时,这个命令就被视为一个job。 每个job都有一个唯一的jobID,并且可以处于不同的......
  • [Flink SQL] FlinkCdcSqlJob启动时因MYSQL serverTimeZone而报错:`The MySQL server ha
    1问题描述FlinkCdcSqlJob启动时报错...Causedby:org.apache.flink.table.api.ValidationException:TheMySQLserverhasatimezoneoffset(0secondsaheadofUTC)whichdoesnotmatchtheconfiguredtimezoneAsia/Shanghai.Specifytherightserver-time-z......
  • 浏览器任务调度API
    window.scheduler是一个相对较新的浏览器API,旨在帮助开发者更高效地管理任务调度,特别是在处理复杂的Web应用程序时。这个API旨在提高应用的性能和响应性,通过允许开发者将任务分配到浏览器的空闲时间片段中执行。什么是 window.scheduler?window.scheduler是一个实验性......
  • 基于32位单片机的裸机开发:使用定时器进行任务调度 V2.0
     在嵌入式系统开发中,合理地管理和调度任务对于提高系统的实时性、可靠性和可维护性非常重要。本文将详细介绍一个基于定时器的任务管理系统的设计与实现,该系统无需使用系统滴答定时器(SysTick)来增加堆栈深度,而是采用基本的定时器来实现任务的分时执行。V2.0对比V1.0优点V2.0......