【 XXL-JOB】 XXL-JOB任务分片
文章目录
- 前言
- xxl-job 分片广播任务的详细教程
- 创建任务
- 编写任务代码
- 分片参数设置
- 执行任务
- 查看任务执行结果
- 示例1
- 示例2
- 总结
前言
xxl-job 是一个分布式任务调度平台,支持定时任务和分片任务。其中,分片任务可以将一个大任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。分片任务中,有一种特殊的任务类型叫做分片广播任务,可以将一个任务广播到所有的执行器节点上执行,本质上是一种并行执行的方式。
xxl-job 分片广播任务的详细教程
创建任务
在 xxl-job 的管理后台中,创建一个分片广播任务。设置任务的基本信息,包括任务名称、任务描述、任务类型(分片广播)、执行器路由策略等。
编写任务代码
编写任务的执行代码,可以使用 Java、Python、Shell 等语言。代码中需要实现一个 execute 方法,用于执行具体的任务逻辑。在分片广播任务中,execute 方法只会在一个执行器节点上执行一次,因此需要考虑并发执行的情况。
分片参数设置
在执行器节点上,需要设置分片参数,用于指定任务的分片信息。分片参数包括分片总数和当前分片项,可以通过 xxl-job 的 API 获取。
执行任务
在执行器节点上,启动 xxl-job 的执行器程序,等待任务的调度。当任务被调度时,执行器会自动执行任务的 execute 方法,并传入分片参数。在 execute 方法中,可以根据分片参数实现任务的具体逻辑。
查看任务执行结果
在 xxl-job 的管理后台中,可以查看任务的执行情况和执行日志。如果任务执行失败,可以查看日志定位问题。
示例1
xxl-job 分片广播任务的代码示例:
@XxlJob("broadcastJob")
public void broadcastJob() {int shardCount = 10; // 分片总数int shardIndex = XxlJobHelper.getShardIndex(); // 当前分片项// 执行任务逻辑for (int i = 0; i < 100; i++) {if (i % shardCount == shardIndex) {// 当前分片项需要执行的任务逻辑System.out.println("Shard " + shardIndex + " is running: " + i);}}
}
上述示例中,使用了 xxl-job 的注解 @XxlJob 标记了一个分片广播任务。任务的名称是broadcastJob,任务的执行逻辑在 broadcastJob 方法中实现。首先获取了分片总数和当前分片项,然后根据分片参数执行具体的任务逻辑。任务逻辑是循环输出数字,并根据分片参数判断是否需要执行。这里使用了 xxl-job 的工具类 XxlJobHelper 来获取分片参数。getShardIndex 方法用于获取当前分片项,getShardTotal 方法用于获取分片总数。在任务执行时,xxl-job 会自动传入分片参数,无需手动设置。

示例2
广播分片处理16个数据库,每个库有32 张表
@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 的一种任务类型,适用于一些需要并行执行的任务场景。在生产环境中,分片广播通常用于以下场景:
- 数据处理任务:例如对大量数据进行清洗、分析、转换等操作,可以将任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。
- 分布式计算任务:例如对大规模数据进行机器学习、深度学习等计算,可以将计算任务拆分成多个小任务,分布式地执行,加速计算过程。
- 并发请求任务:例如对多个服务进行并发请求,可以将请求拆分成多个小请求,分布式地执行,提高请求的并发处理能力。
分片广播适用于需要将一个任务拆分成多个小任务,分布式地执行的场景,可以提高任务的执行效率和可靠性,同时降低单个节点的负载压力。
相关文章:
【 XXL-JOB】 XXL-JOB任务分片
文章目录 前言xxl-job 分片广播任务的详细教程创建任务编写任务代码分片参数设置执行任务查看任务执行结果示例1示例2 总结 前言 xxl-job 是一个分布式任务调度平台,支持定时任务和分片任务。其中,分片任务可以将一个大任务拆分成多个小任务,…...
RK3568开发笔记-SATA接口调试
目录 前言 一、sata接口介绍 物理连接 数据传输速度...
异步编程 - 09 Spring框架中的异步执行_@Async注解异步执行原理源码解析
文章目录 概述小结好文推荐 概述 在Spring中调用线程将在调用含有Async注释的方法时立即返回,Spring是如何做到的呢?其实是其对标注Async注解的类做了代理,比如下面的类Async-AnnotationExample。 public class AsyncAnnotationExample {As…...
django-项目
一、RESTful设计风格 基础概念 全称:Representational State Transfer 1.资源 网络上的一个实体,每个资源都有一个独一无二的URL与之对应;获取资源-直接访问URL即可 2.表现层 资源的表现形式 如HTML、xml、JPG、json等 3.状态转化 …...
红日靶场五(vulnstack5)渗透分析
环境搭建 win7 192.168.111.132(仅主机) 192.168.123.212(桥接) .\heart p-0p-0p-0win2008 ip: 192.168.111.131(仅主机) sun\admin 2020.comkali ip: 192.168.10.131(nat)vps&…...
掌握Gitflow的一些进阶用法
1、自定义分支命名约定: 默认情况下,GitFlow使用一套分支命名约定,如feature/、release/和hotfix/等前缀。然而,你可以根据项目的需求自定义分支名称。例如,你可以在分支名称中包含项目、功能或团队成员的信息&#x…...
算法随笔:各种经典最短路算法的简要比较总结
有多种最短路径的应用场景,它们需要用到不同的算法来解决。除了贪心最优搜索之外,其他都是最优性算法,即得到的解都是最短路径。其中m是边的数量,n是点的数量。 问题边权算法时间复杂度一个起点,一个终点非负数&#…...
concrt140.dll怎么下载,concrt140.dll修复工具(修复精灵下载)一键修复问题
今天,我将为大家介绍一个非常常见的问题:由于找不到concrt140.dll,无法继续执行代码怎么办。这个问题可能会让很多网友感到头疼,但是别担心,我会为大家提供5种最全详细的恢复方法。在接下来我将详细介绍这些问题及其解决方法。希望…...
自行实现字符串转浮点数函数atof()
【重复造轮子的原因】 尽管atof是标准C中自带的函数,用于将字符串转为浮点数,但是在某些环境下有可能没法使用的(例如CUDA环境中,没有atof函数,但是math.h可以使用),因此自行实现。 【通过的测试用例】 【实现的代码】 #include <stdio.h> #include <math.h…...
Windows平台Fortran编程入门
Fortran,原意为 Formula Translation(公式翻译器);一门出现很早的面向科学计算的高级语言,在数值计算领域仍然使用; 免费 Fortran 的编译器包括 GCC 的 GFortran,Intel 的 Intel Fortran Compi…...
05-Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表?【Java面试总结】
Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表? 索引下推是mysql5.6 提出的一个查询优化方案,主要的目的是减少数据或查询中不必要的读取和计算,它的原理是将查询条件尽可能的推送到索引层面…...
晨启,MSP430开发板,51开发板,原理图,PCB图
下载:https://github.com/xddun/blog_code_search...
Notepad++ 的安装及配置
由于电脑重装了Win11系统,干脆重头开始,重新安装每一个软件~~~ 很多博客或者博主都会推荐notepad的官网:https://notepad-plus-plus.org/ 但大家亲自点开就会发现是无响应,如下图 同时,也会有很多博主直接给网盘地址…...
✔ ★算法基础笔记(Acwing)(一)—— 基础算法(20道题)【java版本】
基础算法 一、快速排序1. 快速排序例题2. 第k个数( 快速选择 ) ✔ ✔1.31★快排二刷总结( 4点 ) 二、归并排序1. 归并排序模板题 ✔ ✔1.31★二刷总结 ★2. 逆序对的数量 ✔ ✔1.31★二刷总结 三、二分1. 数的范围 ✔1.31★二刷总结(mid > x 则是 输出最左边一个)第一个大于…...
简单记录下gin中使用中间件记录操作日志
1、直接定义中间件package middlewareimport ("bytes""encoding/json""fmt""github.com/gin-gonic/gin""go.uber.org/zap""io""strconv""strings" )func LoggerMiddleWare() gin.HandlerFunc…...
基于Matlab利用IRM和RRTstar实现无人机路径规划(附上源码+数据+说明+报告+PPT)
无人机路径规划是无人机应用领域中的关键问题之一。本文提出了一种基于IRM(Informed RRTstar Method)和RRTstar(Rapidly-exploring Random Tree star)算法的无人机路径规划方法,并使用Matlab进行实现。该方法通过结合I…...
uniapp使用@microsoft/signalr(报错“ReferenceError: require is not defined“)
后台老哥要用微软的signalr,总结了一些经验和问题 引入方法 1、npm npm i microsoft/signalr 2、下载他的js或者cdn <script src"https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/6.0.1/signalr.js"></script>在uniapp中&…...
CloudCompare 二次开发(9)——半径滤波
目录 一、概述二、代码集成三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 使用CloudCompare与PCL的混合编程实现点云半径滤波。半径滤波的算法原理见:PCL 半径滤波器。基于PCL将半径滤波集成到Cl…...
ElementUI浅尝辄止29:Breadcrumb 面包屑
显示当前页面的路径,快速返回之前的任意页面。 1.如何使用? 在el-breadcrumb中使用el-breadcrumb-item标签表示从首页开始的每一级。Element 提供了一个separator属性,在el-breadcrumb标签中设置它来决定分隔符,它只能是字符串&am…...
ABB MPRC086444-005数字输入模块
ABB MPRC086444-005 是一款数字输入模块,通常用于工业自动化和控制系统中,用于接收和处理数字信号。以下是这种类型的数字输入模块通常可能具备的一般功能和特点: 数字输入接口:MPRC086444-005 模块通常配备多个数字输入通道&…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
