XXL-Job源码分析(I)--调度中心启动

本文深入分析了XXL-Job调度中心的启动流程,包括初始化任务调度器,start方法中的执行器注册监听线程和任务执行失败监听,以及Rpc初始化。调度中心借助Quartz实现定时任务管理,利用RPC与执行器通信,确保任务的管理和执行分离。启动过程中,调度中心主要任务是管理执行器节点和处理失败任务。
摘要由CSDN通过智能技术生成
前言

XXL-Job是一个轻量的分布式任务调度平台,任务的定时调度管理是基于开源定时任务调度框架Quarts来实现的,任务的调度执行采用注册和RPC的方式实现,将任务的管理和执行进行了分离。我们先来了解一下调度中心的源码,调度中心主要负责任务的管理,本身并不复杂任务的业务逻辑,任务触发后,调度中心根据配置的相应规则将任务分配到执行器,执行器处理相应的业务逻辑。

调度中心启动流程
1、初始化任务调度器

XxlJobDynamicScheduler对Quarts的调度器进行封装,并在XxlJobDynamicSchedulers实例化后运行start方法,完成调度中心的启动。

XxlJobDynamicSchedulerConfig.java


    @Bean
    public SchedulerFactoryBean getSchedulerFactoryBean(DataSource dataSource){
   

        SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
        schedulerFactory.setDataSource(dataSource);
        schedulerFactory.setAutoStartup(true);                  // 自动启动
        schedulerFactory.setStartupDelay(20);                   // 延时启动,应用启动成功后在启动
        schedulerFactory.setOverwriteExistingJobs(true);        // 覆盖DB中JOB:true、以数据库中已经存在的为准:false
        schedulerFactory.setApplicationContextSchedulerContextKey("applicationContext");
        schedulerFactory.setConfigLocation(new ClassPathResource("quartz.properties"));

        return schedulerFactory;
    }

    @Bean(initMethod = "start", destroyMethod = "destroy")
    public XxlJobDynamicScheduler getXxlJobDynamicScheduler(SchedulerFactoryBean schedulerFactory){
   
        // 通过注入的调度器工厂生成调度器
        Scheduler scheduler = schedulerFactory.getScheduler();

        XxlJobDynamicScheduler xxlJobDynamicScheduler = new XxlJobDynamicScheduler();
        xxlJobDynamicScheduler.setScheduler(scheduler);

        return xxlJobDynamicScheduler;
    }

2、start方法

由系统的java config类可知,调度中心的启动的初始化工作由start方法实现,start方法源码如下,主要有三个步骤:
1)、启动执行器注册发现监听线程,该线程负责执行器实例的注册与下线;
2)、启动任务执行失败监听线程,负责处理执行失败的任务;
3)、初始化RPC,调度中心与执行器通过RPC方式通信。
同时可以看到JobRegistryMonitorHelper和JobFailMonitorHelper都是单例模式实现。

    public void start() throws Exception {
   
        // valid 验证Quarts调度器是否为空
        Assert.notNull(scheduler, "quartz scheduler is null");

        // init i18n 国际化
        initI18n();

        // admin registry monitor run 自动注册线程,完成执行器的自动发现和注册
        JobRegistryMonitorHelper.getInstance().start();

        // admin monitor run 启动任务执行失败监控线程
        JobFailMonitorHelper.getInstance().start();

        // admin-server 初始化RpcProvider
        initRpcProvider();

        logger.info(">>>>>>>>> init xxl-job admin success.");
    }
3、执行器注册监听线程

这里执行器注册的方式是,执行器启动后会以同样的心跳检测间隔在数据库中更新自己的信息,然后调度中心的监听线程从数据库中获取执行器的注册信息,更新到内存中。

private Thread registryThread;
	private volatile boolean toStop = false;
	public void start(){
   
		registryThread 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值