首页 > 其他分享 >xxl-job实现分片广播任务详细教程

xxl-job实现分片广播任务详细教程

时间:2024-01-02 15:01:16浏览次数:30  
标签:广播 job 任务 分片 执行 xxl

xxl-job 是一个分布式任务调度平台,支持定时任务和分片任务。其中,分片任务可以将一个大任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。分片任务中,有一种特殊的任务类型叫做分片广播任务,可以将一个任务广播到所有的执行器节点上执行,本质上是一种并行执行的方式。

xxl-job 分片广播任务的详细教程:

  • 创建任务

在 xxl-job 的管理后台中,创建一个分片广播任务。设置任务的基本信息,包括任务名称、任务描述、任务类型(分片广播)、执行器路由策略等。

  • 编写任务代码

编写任务的执行代码,可以使用 Java、Python、Shell 等语言。代码中需要实现一个 execute 方法,用于执行具体的任务逻辑。在分片广播任务中,execute 方法只会在一个执行器节点上执行一次,因此需要考虑并发执行的情况。

  • 分片参数设置

在执行器节点上,需要设置分片参数,用于指定任务的分片信息。分片参数包括分片总数和当前分片项,可以通过 xxl-job 的 API 获取。

  • 执行任务

在执行器节点上,启动 xxl-job 的执行器程序,等待任务的调度。当任务被调度时,执行器会自动执行任务的 execute 方法,并传入分片参数。在 execute 方法中,可以根据分片参数实现任务的具体逻辑。

  • 查看任务执行结果

在 xxl-job 的管理后台中,可以查看任务的执行情况和执行日志。如果任务执行失败,可以查看日志定位问题。

广播分片处理16个数据库,每个库有32 张表

javaCopy code
@XxlJob("broadcastJob")
public void broadcastJob() {
    int shardCount = 24; // 分片总数
    int shardIndex = XxlJobHelper.getShardIndex(); // 当前分片项

    // 数据库列表
    String[] databases = {"db1", "db2", "db3", "db4", "db5", "db6", "db7", "db8", "db9", "db10", "db11", "db12", "db13", "db14", "db15", "db16"};

    // 处理每个数据库
    for (String database : databases) {
        // 表列表
        String[] tables = {"table1", "table2", "table3", "table4", "table5", "table6", "table7", "table8", "table9", "table10", "table11", "table12", "table13", "table14", "table15", "table16", "table17", "table18", "table19", "table20", "table21", "table22", "table23", "table24", "table25", "table26", "table27", "table28", "table29", "table30", "table31", "table32"};

        // 处理每张表
        for (String table : tables) {
            if ((shardIndex + table.hashCode()) % shardCount == shardIndex) {
                // 当前分片项需要处理的表
                System.out.println("Shard " + shardIndex + " is processing database " + database + ", table " + table);
                
                // 执行具体的任务逻辑,例如从数据库中读取数据并进行处理
                // ...
            }
        }
    }
}

示例中,使用了 xxl-job 的注解 @XxlJob 标记了一个分片广播任务。任务的名称是 broadcastJob,任务的执行逻辑在 broadcastJob 方法中实现。首先获取了分片总数和当前分片项,然后根据分片参数处理每个数据库中的每张表。在本例中,任务逻辑是输出需要处理的表的信息,并执行具体的任务逻辑,例如从数据库中读取数据并进行处理。这里使用了 hashCode 方法将表名转换为整数,然后根据分片参数判断是否需要处理。这种方式可以保证每张表的处理任务分布均匀,不会因为表名的特殊性导致某些分片项的负载过大。

总结

分片广播是 xxl-job 的一种任务类型,适用于一些需要并行执行的任务场景。在生产环境中,分片广播通常用于以下场景:

  1. 数据处理任务:例如对大量数据进行清洗、分析、转换等操作,可以将任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。
  2. 分布式计算任务:例如对大规模数据进行机器学习、深度学习等计算,可以将计算任务拆分成多个小任务,分布式地执行,加速计算过程。
  3. 并发请求任务:例如对多个服务进行并发请求,可以将请求拆分成多个小请求,分布式地执行,提高请求的并发处理能力。

分片广播适用于需要将一个任务拆分成多个小任务,分布式地执行的场景,可以提高任务的执行效率和可靠性,同时降低单个节点的负载压力。

标签:广播,job,任务,分片,执行,xxl
From: https://blog.51cto.com/u_12266412/9070050

相关文章

  • xxl_job系列---【快速独立部署xxl-job,集xxl-job-admin和executor为一体】
    1.背景我们项目在用xxl-job的时候,只是用到了简单的定时调度http接口功能,所以,为了减少业务工程的侵入性,我决定把executor(执行器)集成到xxl-job-admin中,这样,我们只用部署一个jar包就实现了一个定时调度服务。我们只用在业务工程中写好任务,通过http对外提供服务,xxl-job使用GLUE(Jav......
  • xxl_job系列---【xxl_job快速入门教程】
    1.gitee仓库地址(克隆到本地)地址:https://gitee.com/xuxueli0323/xxl-job2.项目结构3.部署xxl-job-admin切换到2.4.0分支3.1修改数据库连接mysql8(默认)3.2修改数据库连接mysql5.71.修改mysql驱动2.修改配置文件4.新springboot项目集成xxl_job4.1.pom中加入下面依赖<?x......
  • jenkins Job华为云EIP变更带宽
    引言:在数字化时代,云服务资源的弹性管理是企业降低运营成本、提高效率的关键手段。通过弹性公网IP(EIP)服务,企业可以实现按需计费,优化网络支出。然而,根据业务流量的不同阶段调整计费模式,则是提升成本效益的进阶策略。本人腾讯云快十年老用户乘机吐槽一下腾讯云(由于我在大有所为的某......
  • 一文掌握 Vue3 + Express 大文件分片上传、断点续传、秒传技巧!
    前言在日常开发中,文件上传是常见的操作之一。文件上传技术使得用户可以方便地将本地文件上传到Web服务器上,这在许多场景下都是必需的,比如网盘上传、头像上传等。但是当我们需要上传比较大的文件的时候,容易碰到以下问题:上传时间比较久;中间一旦出错就需要重新上传;一般服务端会对文件......
  • Jenkins版本升级后Job的迁移
    场景在平时使用中apt-update不小心把jenkins由原来的2.303.2升级到2.414.3,造成原有的job无法工作解决方法只需要通过直接复制job对应目录下config.xml文件实现迁移旧的Job。config.xml文件包含了JenkinsJob的配置信息,包括源码配置、触发条件、构建步骤等等。迁移过程如下:1.......
  • 后端架构师必知必会系列:分布式数据库与数据分片
    作者:禅与计算机程序设计艺术1.背景介绍随着互联网应用的普及和发展,数据库系统的需求和复杂度也在不断增加。传统的集中式数据库已经无法满足这些需求,因此分布式数据库应运而生。分布式数据库可以有效地应对高并发、大数据等场景,但是也带来了新的问题和挑战。其中,分布式数据库的一个......
  • Redis 分片集群搭建并使用 RedisTemplate 实现读写分离
    上篇博客介绍了Redis哨兵集群的搭建,虽然已经解决了master在宕机后,与slave之间会自动切换的问题,但是其承载的数据量天花板仍然是单机的最大内存容量,无法承载更多的数据量。本篇博客介绍Redis分片集群的搭建,集群内部拥有多个master节点,每个master存放的数据不一样,从而......
  • xxlJob Cron表达式 0 0 8,13 * * ?
    xxlJobCron表达式 008,13**?Cron有如下两种语法格式:(1)SecondsMinutesHoursDayofMonthMonthDayofWeekYear(2)SecondsMinutesHoursDayofMonthMonthDayofWeekcorn从左到右(用空格隔开):秒分小时月份中的日期月份星期中的日期年份字段 允许值 允许的特殊字......
  • 大文件分片上传
    文件传输是一个常见的需求。对于大文件的下载和上传,直接使用传统的方式可能会遇到性能和用户体验方面的问题。幸运的是,前端技术提供了一些高效的解决方案:文件流操作和切片下载与上传。本文将深入探讨这些技术,帮助你理解它们的原理和实现方法,以优化文件传输效率和提升用户体验。一......
  • 【前后台完整版】大文件分片上传
    在一般的产品开发过程中,大家多少会遇到上传视频功能的需求,往往我们采用的都是对视频大小进行限制等方法,来防止上传请求超时,导致上传失败。这时候可能将视频分片上传可以对你的项目有一个小小的体验优化。本片文章前端是vue,后台基于PHP进行的分片上传,需要的小伙伴可以借鉴。前端......