XXL-JOB分布式任务调度框架(二)-路由策略

文章目录
- 1.引言
- 2.任务详解
- 2.1.执行器
- 2.2.基础配置
- 3.路由策略(第一个)-案例
- 4.路由策略(最后一个)-案例
- 5.轮询策略-案例
- 7.分片广播任务
1.引言
本篇文章承接上文《XXL-JOB分布式任务调度框架(一)-基础入门》,上一次和大家简单介绍了下 xxl-job 的由来以及使用方法,本篇文章将会详细介绍一些高级使用方法及特性。
上文中我们在新建一个任务的时候发现有很多的选项,现在我们来详细聊一聊他们的作用。
)
2.任务详解
2.1.执行器
执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能;
另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器

2.2.基础配置
-
执行器:每个任务必须绑定一个执行器, 方便给任务进行分组。任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 “执行器管理” 进行设置
-
任务描述:任务的描述信息,便于任务管理
-
报警邮件:任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔;
-
负责人:任务的负责人;

-
调度类型
- 无:该类型不会主动触发调度;
- CRON:该类型将会通过CRON,触发任务调度;
- 固定速度:该类型将会以固定速度,触发任务调度;按照固定的间隔时间,周期性触发;

-
运行模式:

-
BEAN模式:以JobHandler方式维护在执行器端;需要结合 “JobHandler” 属性匹配执行器中任务;
-
GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 “groovy” 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;
-
GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “shell” 脚本;
-
GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “python” 脚本;
-
GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “php” 脚本;
-
GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “nodejs” 脚本;
-
GLUE模式(PowerShell):以源码方式维护在调度中心;该模式的任务实际上是一段 “PowerShell” 脚本;
-
JobHandler:运行模式为 “BEAN模式” 时生效,对应执行器中新开发的
JobHandler类“@JobHandler”注解自定义的value值; -
执行参数:任务执行所需的参数;
-
阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
- 单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
- 丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
- 覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;

路由策略:当执行器集群部署时,提供丰富的路由策略
路由策略是指一个任务可以由多个执行器完成,那具体由哪一个完成呢,这就要看我们指定的路由策略了,这个参数当执行器做集群部署的时候才有意义。

那么这里的第一个,最后一个是按什么顺序来的呢,就是点击查看-注册节点中的1,2,3,4,第一个指的就是1,最后一个指的就是4。


-
子任务:每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取),当本任务执行结束并且执行成功时,将会触发子任务ID所对应的任务的一次主动调度。
-
任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务;
-
失败重试次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
3.路由策略(第一个)-案例
执行器部署集群


配置路由规则

任务执行效果:第一个执行器执行任务

4.路由策略(最后一个)-案例
执行器部署集群

配置路由规则

任务执行效果:最后一个执行器执行任务

5.轮询策略-案例
执行器部署集群

配置路由规则

任务执行效果:轮询执行任务(一共执行4次,各执行2次)

7.分片广播任务
执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务。

内部实现方式:如果有n个实例,那用任务项ID%n,由此来选择实例

需求:让两个节点同时执行10000个任务,每个节点分别执行5000个任务
创建分片执行器:xxl-job-sharding-sample

创建任务,路由策略指定为分片广播

分片广播代码
- 分片参数
- index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
- total:总分片数,执行器集群的总机器数量;
案例实现:
配置执行器的名称

创建任务
package com.xxl.job.config;import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.List;@Component
public class HelloJob1 {@XxlJob("shardingJobHandler")public void shardingJobHandler() {//分片的参数//1.当前分片序号(从0开始),执行器集群列表中当前执行器的序号;int shardIndex = XxlJobHelper.getShardIndex();//2.总分片数,执行器集群的总机器数量;int shardTotal = XxlJobHelper.getShardTotal();//业务逻辑List<Integer> list = getList();for (Integer integer : list) {if (integer % shardTotal == shardIndex) {System.out.println("当前第" + shardIndex + "分片执行了,任务项为:" + integer);}}}public List<Integer> getList() {List<Integer> list = new ArrayList<>();for (int i = 0; i < 10000; i++) {list.add(i);}return list;}
}

启动多个实例,进行测试


相关文章:
XXL-JOB分布式任务调度框架(二)-路由策略
文章目录1.引言2.任务详解2.1.执行器2.2.基础配置3.路由策略(第一个)-案例4.路由策略(最后一个)-案例5.轮询策略-案例7.分片广播任务1.引言 本篇文章承接上文《XXL-JOB分布式任务调度框架(一)-基础入门》,上一次和大家简单介绍了下 xxl-job 的由来以及使用方法&…...
Java_Maven:5. 把第三方 jar 包放入本地仓库或私服
目录 1 导入本地库 2 导入私服 3 参数说明 1 导入本地库 随便找一个 jar 包测试,可以先 CMD进入到 jar 包所在位置,运行 mvn install:install-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37-Dfile fastjson-1.1.37.jar -Dpackaging…...
【剑指offer】03~05. 数组中的数字(C# 实现)
文章目录前言03. 数组中重复的数字04. 二维数组中的查找05. 替换空格结语前言 😃 大家好,我是writer桑,这是自己整理的 C# 做题记录,方便自己学习的同时分享出来,感谢支持。 03. 数组中重复的数字 题目描述࿱…...
Docker入门教程
文章目录一、Docker概述1. 什么是容器技术?2. 什么是Docker3. 为什么要使用Docker4. Docker和虚拟机的对比5. Docker相关概念6. DockerHub7. Docker架构二、安装Docker1. 安装Docker2. 配置阿里云镜像加速三、Docker常用命令1. 帮助命令2. 镜像操作命令3. 容器操作命…...
I2C总线应用测试程序
参考链接:I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性,需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…...
主从表的建立
//表查--病害id--主从表public static DataSet QueryGetQlgjDispdbdisidTABbyqidZC(string qid, string bwname){string SQLStringZ "select * from tl_qlsoft_cql_qlcheck_qlstye_bw a, tl_qlsoft_cql_qlcheck_qlstye_bw_gj b where a.chbwidb.chbwid and a.qli…...
Exporter介绍与指标数据,规范说明(更新中)
1.exporter是什么广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:2.exporter的来源与分类从Exporter的来源上来讲&am…...
[Android Studio] Android Studio Virtual Device虚拟机的功能试用
🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 🚀write…...
华为OD机试 - 检查数组中是否存在满足规则的数组组合1(Python)
检查数组中是否存在满足规则的数组组合1 题目 给定一个正整数数组 检查数组中是否存在满足规则的数组组合 规则: A = B + 2C 输入 第一行输出数组的元素个数 接下来一行输出所有数组元素,用空格隔开 输出 如果存在满足要求的数 在同一行里依次输出规则里A B C的取值,用…...
深圳“托育”放大招!政府出钱帮你带娃啦!
工作忙得不可开交 难以照料孩子的起居 这个带娃难题常常让双职工家庭 感觉到头疼不已 一边是工作,一边是孩子 父母都上班,宝宝谁来带? 未来这个问题将迎刃而解! 因为政府要出钱帮你带娃啦! 近日,深圳市总工…...
服务间调用方式 OpenFeign 的介绍和使用
文章目录前言1、 RestTemplate1.1、通用方法 exchange1.2、RestTemplate 和 OpenFeign 的区别2、RPC 和 HTTP2.1、RPC 是什么2.2、RPC 调用过程示意图2.3、HTTP 是什么2.4、HTTP 调用过程示意图2.5、对比3 、OpenFeign3.1 、OpenFeign 常用注解3.2 、案例前言 Feign 停更了&am…...
从开始测试到年薪40W,我的自动化测试艰辛历程
我希望我的故事能够激励现在的软件测试人,尤其是还坚持在做“点点点”的测试人。 你可能会有疑问:“我也能做到这一点的可能性有多大?”因此,我会尽量把自己做决定和思考的过程讲得更具体一些,并尽量体现更多细节。 …...
《C++ Primer Plus》第17章:输入、输出和文件(1)
对C输入和输出(简称I/O)的讨论提出了一个问题。一方面,几乎每个程序都要使用输入和输出,因此了解如何使用它们是每个学习计算机语言的人面临的首要任务;另一方面,C使用了很多较为高级的语言特性来实现输入和…...
静态代码审计插件 snyk 使用教程
目录 1、vscode 插件安装 2、手动生成 token 3、自动分析 1、vscode 插件安装 2、手动生成 token 点击登录链接:...
从“服务”,到“赋能”,日日顺再次定义供应链生态建设
在众多不确定因素的交织下,当下的供应链企业变革呈现出前所未有的紧迫感。一体化、全链路的趋势,为企业的发展指明方向,与此同时数字化与科技化开始承托供应链管理能力的升级与变革。 2月15日,由日日顺供应链、运联智库联合举办的…...
MySQL(一):B+ Tree,索引以及其优点, 索引实战, 聚簇索引和非聚簇索引, 最左匹配,索引失效
文章目录一、B TreeB Tree相比于红黑树的优点1. B树有更低的树高2. B树更符合磁盘访问原理二、MySQL索引2.1 B Tree索引2.2 哈希索引2.3 全文索引2.4 空间数据索引三、索引的优点以及什么时候需要使用索引什么时候需要使用索引四、索引实战建立普通索引建立唯一索引建立主键索引…...
06:进阶篇 - Hello,CTK!
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在接触任何语言时,我们总能看到“Hello,World!",它的中文意思是“你好,世界!”。由于简洁、实用,所以非常著名。 为了延续这个优良传统并迎接 CTK,在演示第一个插件时,我们使用“Hello,CTK!&qu…...
SpringCloud(一)注册中心
注册中心eureka服务端客户端负载均衡nacos服务端客户端nacos分级存储模型配置集群属性nacos环境隔离-namespace临时实例和非临时实例Eureka和Nacos的异同负载均衡策略饥饿加载eureka 服务端 依赖 <!-- eureka注册中心服务端依赖--><dependencies><depe…...
centos7环境配置
Python Centos7中自带的python2,如果要是用python3,就需要自己安装了,因为yum源中没有python3,需要下载包进行源码编译安装。 安装步骤 1、安装python3相关依赖包 yum -y install zlib-devel bzip2-devel openssl-devel nc…...
如何解锁华为手机PIN/图案/指纹/人脸锁?
您的手机存储主要数据,因此为您的设备设置安全代码让您高枕无忧。屏幕和生物识别锁可在手机丢失时保护您的手机,并使其在被盗时无法访问。每次您需要密码来解锁手机时,但如果您被锁在密码之外怎么办? 今天的话题将独家帮助华为用…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
