分布式任务调度:XXL-Job入门介绍实战

1. 引言

随着互联网业务的不断扩展和复杂化,分布式任务调度成为了构建大规模系统的重要组成部分。XXL-Job作为一款开源的分布式任务调度平台,提供了完整的任务调度和管理功能,被广泛应用于各种场景。本文将介绍如何入门使用XXL-Job,通过实战演示帮助读者快速上手分布式任务调度。

官网:分布式任务调度平台XXL-JOB 

2. Xxl-job介绍

XXL-Job 是一款开源的分布式任务调度平台,由阿里巴巴开发团队提供支持。它提供了完整的任务调度和管理功能,能够帮助用户实现分布式环境下的任务调度、执行和监控。XXL-Job具有轻量、易用、稳定的特点,广泛应用于各种业务场景。

2.1 主要特性
  • 任务管理: 支持任务的新增、编辑、暂停、恢复、删除等操作,提供了丰富的任务管理功能。
  • 分布式执行: 支持分布式部署,任务执行器可以部署在不同的节点上,实现任务的分布式执行。
  • 调度监控: 提供了任务执行情况的监控和统计功能,包括任务执行次数、执行状态、执行日志等信息。
  • 动态调度: 支持任务的动态调度和执行,可以根据实际业务需求灵活调整任务的执行策略和执行时间。
  • 报警机制: 支持任务执行异常时的报警机制,可配置报警方式和报警接收人,及时发现和处理任务执行异常情况。
  • 任务分片: 支持将任务分片执行,提高任务执行效率,同时支持分片广播,确保任务的执行顺序和一致性。
  • 扩展性: 支持自定义任务执行器和调度策略,可以根据业务需求进行灵活扩展和定制。
2.2 架构设计

XXL-Job的架构设计主要包括调度中心、执行器、数据库、消息队列等组件。调度中心负责任务的调度和管理,执行器负责接收调度中心分配的任务并执行,数据库用于存储任务信息和调度规则,消息队列用于调度中心和执行器之间的通信。

引用自官网的架构图

2.3 应用场景

XXL-Job广泛应用于各种业务场景,包括但不限于数据处理和计算任务调度、定时任务调度、异步任务调度、实时任务调度等。它能够帮助用户实现任务的统一调度和管理,提高系统的稳定性和可靠性。

3. 快速开始

3.1 下载安装

首先,从XXL-Job的官方网站下载最新版本的发布包,并解压到本地目录。这里演示以源码的方式启动,其他方式可以参考官网文档:

github:GitHub - xuxueli/xxl-job at 2.4.0

3.2 配置数据库

将db目录下的sql文件在mysql里执行初始化xxl所需的表,进入解压后的xxl-job-admin工程,编辑application.properties文件,配置数据库连接信息。

3.3 启动服务

xxl-job-admin目录下执行以下命令启动XXL-Job Admin服务:

4. 创建任务

4.1 登录管理界面

打开浏览器,访问http://localhost:8080/xxl-job-admin,使用默认的管理员账号和密码admin/123456登录。

4.2 新增执行器

在页面上的执行器管理新增,填写AppName,就是代码里定义的

xxl.job.executor.appname=xxl-job-executor-sample

4.3 新增任务

在左侧菜单栏选择“调度中心” -> “任务管理”,点击“新增”按钮,填写任务名称、执行器、执行方式等信息。

其中执行器是自动注册好的,可以在页面上查看执行器的地址(远程调用),JobHandler就是代码中定义的@Xxl-job注解定义的值

5. SpringBoot集成

源码里有springboot集成的demo,下面是截图,其中XxlJobConfig.java是核心类,如果缺少这个,执行器是无法注册到xxl-job上的。


import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job config
 *
 * @author xuxueli 2017-04-28
 */
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


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

        return xxlJobSpringExecutor;
    }
}
5.1 创建执行任务

在项目中创建一个实现IJobHandler接口的执行器类,实现execute方法,编写任务逻辑代码。

@Component
public class SampleXxlJob {
    private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);


    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");

        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        // default success
    }
}

6. 启动任务

在任务管理界面中选择刚刚创建的任务,点击“启动”按钮,启动配置好的任务。也可以执行一次,可以看到已经调用到本地的任务代码里了。

  
6.1 查看调度日志

7. 总结

通过本文的介绍和实战演示,读者可以快速了解并上手使用 XXL-Job 进行任务调度管理。XXL-Job 提供了简单易用的界面和丰富的功能,能够满足各种任务调度需求,是一款值得推荐的分布式任务调度平台。


更多文章

RabbitMQ入门实战-CSDN博客

presto/trino 入门介绍实战_presto和trino怎么选-CSDN博客

MongoDB入门介绍与实战-CSDN博客

Netty入门与实战教程_netty教程-CSDN博客

Nacos入门介绍与使用_怎么找到nacos的控制台-CSDN博客

ElasticSearch入门介绍和实战-CSDN博客

JMM内存屏障和逃逸分析详解-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Memory_2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值