当前位置: 首页 > news >正文

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;}
}

在这里插入图片描述
启动多个实例,进行测试
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/10945.html

相关文章:

  • Java_Maven:5. 把第三方 jar 包放入本地仓库或私服
  • 【剑指offer】03~05. 数组中的数字(C# 实现)
  • Docker入门教程
  • I2C总线应用测试程序
  • 主从表的建立
  • Exporter介绍与指标数据,规范说明(更新中)
  • [Android Studio] Android Studio Virtual Device虚拟机的功能试用
  • 华为OD机试 - 检查数组中是否存在满足规则的数组组合1(Python)
  • 深圳“托育”放大招!政府出钱帮你带娃啦!
  • 服务间调用方式 OpenFeign 的介绍和使用
  • 从开始测试到年薪40W,我的自动化测试艰辛历程
  • 《C++ Primer Plus》第17章:输入、输出和文件(1)
  • 静态代码审计插件 snyk 使用教程
  • 从“服务”,到“赋能”,日日顺再次定义供应链生态建设
  • MySQL(一):B+ Tree,索引以及其优点, 索引实战, 聚簇索引和非聚簇索引, 最左匹配,索引失效
  • 06:进阶篇 - Hello,CTK!
  • SpringCloud(一)注册中心
  • centos7环境配置
  • 如何解锁华为手机PIN/图案/指纹/人脸锁?
  • 物理层基本介绍
  • 数据库原理及应用期末复习汇总(附某高校期末真题试卷)
  • mummerplot gnuplot 安装(nucmer)
  • 怎样做校园外卖配送系统创业?打造一体化服务校园平台如何进行?
  • MySQL(三):切分,主从复制,读写分离
  • 王道考研——计算机网络(第一章 计算机网络体系结构)
  • ElementUI中为什么使用this.$refs.form.validate验证成功却直接跳过
  • 全期望值定理与全方差定理
  • 股票的最大利润 AcWing (JAVA)
  • Go 语言函数调用参数传递规则
  • 二分查找【零神基础精讲】