xxl-job

简介

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用

dashboard部署

源码包部署

github地址:GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)

gitee地址:xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

从上述仓库中下载xxl-job源码,导入idea即可,项目路径如下图所示:

初始化数据库文件

  在项目的./doc/db/tables_xxl_job.sql文件即是xxl-job运行所需sql脚本文件,执行ddl语句创建运行所需的表(MYSQL)

修改相关配置文件

        修改xxl-job-admin项目下的application.properties配置文件中关于数据源的配置,指向上一步执行ddl的数据源地址即可

启动dashboard

        将xxl-job-admin项目打包启动即可(也可直接在idea中运行)

docker部署

 初始化数据库文件

        同上源码包部署方式一样

docker启动
docker run -it -d -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.56.103:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456" \
-v /root/xxl-job/data/applogs:/data/applogs \
--name xxl-job-admin \
-p 8080:8080 \
xuxueli/xxl-job-admin:2.2.0

其中数据源地址根据自己的实际情况修改即可

部署成功之后访问:http://{ip}:8080/xxl-job-admin 

其中默认的登录用户名和密码:admin/123456

登录之后的界面如下:

dashboard几个概念介绍

执行器:通过xxl-job注册到dashboard上的应用,可以理解成xxl-job的一个客户端

任务:注册到dashboard上的每个应用的任务

先简单理解即可,后续在源码分析篇会详细介绍

应用接入

依赖引入

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.2.0</version>
</dependency>

引入xxl-job的核心逻辑即可,注意引入版本号和dashbaord的版本一致

配置执行器

xxl-job的核心逻辑在于配置一个XxlJobExecutor执行器,其中有2个核心参数需要配置:

adminAddresses:dashboard的地址,直接配置访问dashboard的页面地址即可
appname:应用的名称,该属性用于在dashboard端分组用,在分布式环境下,相同的应用配置相同的名称

示例如下:

private static XxlJobExecutor createExecutor() {
        XxlJobExecutor executor = new XxlJobExecutor();
        executor.setAdminAddresses("http://192.168.56.105:8080/xxl-job-admin");
        executor.setAppname("test");
        return executor;
    }

编写调度处理器

处理器是每个定时任务的执行逻辑,调度是发生在dashbaord,当在dashboard端配置的定时任务到达触发节点,会调用处理器逻辑完成业务处理(在后续的源码分析中会详细阐述),在使用的时候只需要集成类:com.xxl.job.core.handler.IJobHandler即可,当然在spring容器环境使用注解@xxlJob也可以(原理一样,spring通过动态代理完成注册)

实例如下:

private static class TestJobHandler extends IJobHandler{

        @Override
        public ReturnT<String> execute(String param) throws Exception {
            System.out.println("接收调度参数是:" + param);
            return ReturnT.SUCCESS;
        }
    }

完整示例

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.executor.XxlJobExecutor;
import com.xxl.job.core.handler.IJobHandler;

public class XxlConfig {

    public static void main(String[] args) throws Exception {
        XxlJobExecutor.registJobHandler("TestJobHandler",new TestJobHandler());
        XxlJobExecutor executor = createExecutor();
        executor.start();
        Thread.currentThread().join();
    }

    private static XxlJobExecutor createExecutor() {
        XxlJobExecutor executor = new XxlJobExecutor();
        executor.setAdminAddresses("http://10.82.253.93:8080/xxl-job-admin");
        executor.setAppname("test");
        return executor;
    }

    private static class TestJobHandler extends IJobHandler{

        @Override
        public ReturnT<String> execute(String param) throws Exception {
            System.out.println("接收调度参数是:" + param);
            return ReturnT.SUCCESS;
        }
    }
}

启动main方法,此时可以在数据库表:xxl_job_registry中查看到相关注册信息

springboot应用中的应用

依赖引入

同上,在springboot应用中值需要引入对应的xxl-job-core包即可

<dependency>
  <groupId>com.xuxueli</groupId>
  <artifactId>xxl-job-core</artifactId>
  <version>2.2.0</version>
</dependency>

配置执行器

在springboot应用中配置执行器略有不同,需要配置XxlJobExecutor子类XxlJobSpringExecutor

并且作为ioc的bean注册到spring容器即可,示例代码如下:

 @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        log.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }

XxlJobSpringExecutor增加了spring的适配,做了一些额外的操作(原理和一般应用接入原理一样)

使用注解完成注册

使用注解标记相关方法即可被xxl-job识别,示例代码如下:

@XxlJob("recordDelete")
    public ReturnT<String> recordDelete(String taskParam) {
        log.info("start to execute oneDay delete record task!");
        // 删除一周前的
        deleteOneWeekBeforeRecordData();
        return ReturnT.SUCCESS;
    }

注意:通过注解标记xxl的方法时有如下几个规定:

1 方法的返回值必须是ReturnT类型

2 方法的参数类型必须是String类型

后续在源码分析阶段会详细说明

配置dashboard

执行器配置

当应用注册之后,需要手动到xxl-job上完成执行器的新增(这一点感觉xxl-job可以优化),如上图所示,之后xxl-job会获取到对应注册的ip地址等相关信息

任务配置

在dashbaord上:任务管理-》新增,完成任务的配置,其中执行器选择对应的appname名称,其他的一些配置,

路由策略:

在分布式环境下,当有多个实例时,根据配置的路由规则选择符合的实例调度任务

运行模式:

常用的是BEAN(也就是直接实现IJobhandler接口,其他的运行模式是实现其他的相关接口)

阻塞策略:

阻塞策略是指:当调度任务由于没有配置超时时间,导致长时间运行,知道第二次触发上一次的任务还没有结束时的处理策略,字面意思就可理解

路由策略、运行模式、阻塞处理策略的执行原理会在后续源码分析详细讲解

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值