xxl-job的分片广播+单播及其应用实战

1 介绍一下xxl-job

XXL-JOB 是一个分布式任务调度平台,旨在为分布式应用系统提供开箱即用的调度解决方案。它非常易于使用,并具有很高的可扩展性。以下是 XXL-JOB 的详细介绍,包括其核心功能、架构设计、主要组件及其应用场景。

核心功能

  1. 简单易用:

    • 提供友好的 Web 控制台,支持任务的增删查改操作。
    • 支持手动触发、停止和重试任务。
  2. 调度策略丰富:

    • 支持 CRON 表达式调度,精确到秒。
    • 支持手动触发、周期调度、固定频率调度、补偿调度等多种调度策略。
  3. 任务执行方式:

    • 支持 BEAN、GLUE(即在控制台编辑的脚本,比如JavaScript、Groovy)、脚本(Shell、Python 等)的任务执行方式。
  4. 分布式支持:

    • 天然支持集群,采用无中心设计,可以轻松进行水平扩展。
    • 支持广播模式和分片广播模式的任务执行方式。
  5. 执行日志:

    • 详细记录每一次任务执行情况,包括任务开始时间、结束时间、执行结果和日志内容。
  6. 失败告警:

    • 支持邮件、钉钉等多种方式进行任务执行失败告警。

架构设计

XXL-JOB 采用调度中心和执行器的分离设计,调度中心负责任务的管理和调度,执行器负责任务的具体执行。其主要架构组件包括:

  1. 调度中心(Admin)

    • 提供 Web 管理界面,进行任务的管理和调度。
    • 负责计算调度任务并将任务下发给执行器。
  2. 执行器(Executor)

    • 实现执行任务的具体逻辑。
    • 从调度中心接收任务并执行,执行完毕后回传执行结果。
  3. 任务调度:

    • 基于 CRON 表达式或自定义调度方式进行任务调度。
  4. 执行日志:

    • 记录任务的执行日志,方便查看任务的执行情况。

主要组件

  1. 调度中心(Admin):

    • Web 控制台:提供任务的管理和监控。
    • 调度管理:执行调度任务的分发。
  2. 执行器(Executor):

    • 任务处理器:处理具体执行的任务逻辑。
    • 日志记录:记录任务执行日志。

典型使用场景

  1. 数据处理:

    • 定时从数据库、文件系统或者其他数据源提取数据,进行数据清洗和处理,再存储到数据仓库或其他存储系统。
  2. 营销活动:

    • 定时推送营销消息或进行营销数据统计分析。
  3. 定时备份:

    • 定时备份数据库、文件系统,以防止数据丢失。
  4. 定时检测:

    • 定时进行服务器健康检测、系统性能监控等。

示例项目

以下是一个简单的示例项目,展示如何快速集成 XXL-JOB 到 Spring Boot 项目中。

1. 引入依赖

在您的 pom.xml 文件中添加 XXL-JOB 核心依赖:

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version> <!-- 版本号根据实际情况选择 -->
</dependency>
2. 配置 XXL-JOB 执行器

application.propertiesapplication.yml 文件中配置执行器参数:

xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
xxl.job.executor.appname=xxl-job-executor-example
xxl.job.executor.ip=
xxl.job.executor.port=9999
xxl.job.accessToken=
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30
3. 启动类添加 XXL-JOB 配置

在 Spring Boot 主入口类中添加 XXL-JOB 执行器配置:

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class XxlJobConfig {
   
   

    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
   
   
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses("http://127.0.0.1:8080/xxl-job-admin");
        xxlJobSpringExecutor.setAppname("xxl-job-executor-example");
        xxlJobSpringExecutor.setIp(null);
        xxlJobSpringExecutor.setPort(9999);
        xxlJobSpringExecutor.setAccessToken(null);
        xxlJobSpringExecutor.setLogPath("/data/applogs/xxl-job/jobhandler");
        xxlJobSpringExecutor.setLogRetentionDays(30);
        return xxlJobSpringExecutor;
    }
}
4. 编写任务处理器

在项目中编写一个任务处理器,并使用 @XxlJob 注解声明任务名称:

import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import com.xxl.job.core.biz.model.ReturnT;
import org.springframework.stereotype.Component;

@Component
public class SampleJob {
   
   

    @XxlJob("sampleJobHandler")
    public ReturnT<String> execute(String param) throws Exception {
   
   
        XxlJobLogger.log("XXL-JOB, Hello World.");
        System.out.println("Executing job with param: " + param);
        return ReturnT.SUCCESS;
    }
}
5. 在控制台配置任务

登录 XXL-JOB 管理控制台,创建并配置调度任务。

通过这些步骤,你可以轻松在项目中集成和使用 XXL-JOB 进行任务调度。XXL-JOB 提供了强大的功能和灵活的配置,适用于各种场景下的任务调度需求。

2 弄懂xxl-job的bean调度策略和路由策略以及阻塞策略。

2.1 bean模式

在这里插入图片描述
在这里插入图片描述

2.2 xxl-job的bean调度策略和jobHandler路由策略以及阻塞策略关系

在 XXL-JOB 的任务调度中,Bean 调度策略、JobHandler 路由策略以及阻塞策略是三个不同层面的配置选项,它们共同作用来决定任务的执行方式。下面我们来详细讲解这些概念及其相互关系。

1. Bean 调度策略 (Bean 的定义和注册)

Bean 调度策略主要用于定义任务的实际执行逻辑。在 Spring 项目中,通常通过 @XxlJob 注解将某个方法注册为 XXL-JOB 的 JobHandler。

例如:


                
xxl-job分片广播任务的编写步骤如下: 1. 在xxl-job-admin管理后台创建任务,并在“执行器”选项卡中选择“分片广播”作为任务执行方式。 2. 在“JobHandler”中填写任务处理类的全限定名,例如:com.xxx.xxx.MyJobHandler。 3. 在“JobParam”中填写任务参数,例如:{"param":"test"}。 4. 在“ShardingTotalCount”中填写分片总数,例如:10。 5. 在“ShardingItemParameters”中填写分片参数,例如:0=a,1=b,2=c,3=d,4=e,5=f,6=g,7=h,8=i,9=j。 6. 在任务处理类中实现“execute”方法,并在方法中根据分片参数执行相应的任务逻辑。 7. 在“execute”方法中,通过“ShardingContext”对象获取当前分片项和分片总数,并根据当前分片项执行相应的任务逻辑。 8. 在“execute”方法中,通过“ShardingContext”对象获取当前分片项和分片总数,并根据当前分片项执行相应的任务逻辑。 9. 在“execute”方法中,通过“ShardingContext”对象获取当前分片项和分片总数,并根据当前分片项执行相应的任务逻辑。 10. 在“execute”方法中,通过“ShardingContext”对象获取当前分片项和分片总数,并根据当前分片项执行相应的任务逻辑。 11. 在“execute”方法中,通过“ShardingContext”对象获取当前分片项和分片总数,并根据当前分片项执行相应的任务逻辑。 12. 在“execute”方法中,通过“ShardingContext”对象获取当前分片项和分片总数,并根据当前分片项执行相应的任务逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值