xxl-job 分布式任务调度框架

news2024/12/27 3:54:17

文章目录

  • 分布式任务调度
  • XXL-Job 简介
  • XXL-Job 环境搭建
  • XXL-Job (源码说明)
  • 配置部署调度中心
    • docker安装
  • Bean模式任务(方法形式)-入门案例
  • 任务详解
    • 任务详解-执行器
    • 任务详解-基础配置
    • 任务详解-调度配置
    • 任务详解-基础配置
    • 任务详解-阻塞处理策略
    • 任务详解-路由策略
  • 路由策略
    • 路由策略(轮询)-案例
    • 路由策略(分片广播)
    • 路由策略(分片广播)-案例


spring 传统的定时任务@Scheduled,但是这样存在这一些问题 :

  • 做集群任务的重复执行问题
  • cron表达式定义在代码之中,修改不方便
  • 定时任务失败了,无法重试也没有统计
  • 如果任务量过大,不能有效的分片执行

分布式任务调度

在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。

在这里插入图片描述

XXL-Job 简介

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
源码地址:https://gitee.com/xuxueli0323/xxl-job
文档地址:https://www.xuxueli.com/xxl-job/

同类产品:

在这里插入图片描述

XXL-Job 环境搭建

  1. 调度中心环境要求
    Maven3+
    Jdk1.8+
    Mysql5.7+

  2. 源码仓库地址

源码仓库地址Release Download
https://github.com/xuxueli/xxl-jobhttps://github.com/xuxueli/xxl-job/releases
http://gitee.com/xuxueli0323/xxl-jobhttp://gitee.com/xuxueli0323/xxl-job/releases

XXL-Job (源码说明)

在这里插入图片描述

配置部署调度中心

作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

  1. 调度数据库初始化SQL脚本执行
    位置:xxl-job/doc/db/tables_xxl_job.sql 共8张表

在这里插入图片描述

  1. 调度中心配置
    配置文件位置:xxl-job/xxl-job-admin/src/main/resources/application.properties

在这里插入图片描述

  1. 启动调度中心,默认登录账号 “admin/123456”, 登录后运行界面如下图所示。

在这里插入图片描述

docker安装

  1. 创建mysql容器,初始化xxl-job的SQL脚本

在这里插入图片描述

  1. 拉取镜像

在这里插入图片描述

  1. 创建容器

在这里插入图片描述

Bean模式任务(方法形式)-入门案例

  1. 登录调度中心,点击下图所示“新建任务”按钮,新建示例任务

在这里插入图片描述

  1. 创建xxljob-demo项目,导入依赖

在这里插入图片描述

  1. application.yml 配置

在这里插入图片描述

  1. 任务代码,重要注解:@XxlJob(“JobHandler”)

在这里插入图片描述

  1. 测试-单节点
  • 启动微服务
  • 启动任务

任务详解

任务详解-执行器

  • 执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能;
  • 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器

在这里插入图片描述

任务详解-基础配置

  • 执行器:每个任务必须绑定一个执行器, 方便给任务进行分组
  • 任务描述:任务的描述信息,便于任务管理;
  • 负责人:任务的负责人;
  • 报警邮件:任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔

在这里插入图片描述

任务详解-调度配置

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

在这里插入图片描述

任务详解-基础配置

  • 运行模式:
    BEAN模式:任务以JobHandler方式维护在执行器端;需要结合

  • “JobHandler” 属性匹配执行器中任务;
    JobHandler:运行模式为 “BEAN模式” 时生效,对应执行器中新开发的 JobHandler 类“@JobHandler”注解自定义的 value 值;

  • 执行参数:任务执行所需的参数;

在这里插入图片描述

任务详解-阻塞处理策略

阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;

  • 单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO(First Input First Output)队列并以串行方式运行;
  • 丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
  • 覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;

在这里插入图片描述

任务详解-路由策略

在这里插入图片描述

当执行器集群部署时,提供丰富的路由策略,包括;

  • FIRST(第一个):固定选择第一个机器;
  • LAST(最后一个):固定选择最后一个机器;
  • ROUND(轮询):
  • RANDOM(随机):随机选择在线的机器;
  • CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
  • LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
  • LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举;
  • FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
  • BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
  • SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;

路由策略

路由策略(轮询)-案例

  • 修改任务为轮询

在这里插入图片描述

  • 启动多个微服务

在这里插入图片描述

路由策略(分片广播)

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

在这里插入图片描述

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

在这里插入图片描述

路由策略(分片广播)-案例

需求:让两个节点同时执行10000个任务,每个节点分别执行5000个任务

①:创建分片执行器

在这里插入图片描述

②:创建任务,路由策略为分片广播

在这里插入图片描述

③:分片广播代码

分片参数

  • index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
  • total:总分片数,执行器集群的总机器数量;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1277507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统地自学 Python

文章目录 如何系统地自学 Python1. 选择合适的 Python 版本2. 安装 Python 和必要的工具3. 学习 Python 的基础知识4. 学习 Python 的高级特性5. Python 的应用领域6. 保持良好的学习习惯 如何系统地自学 Python Python 是一种广泛使用的编程语言,它具有简洁、易读、…

公众号文章采集器,免费的公众号文章采集

优质的公众号文章如同一座宝库,蕴含着丰富的知识和实用的信息。众多公众号纷繁复杂,如何高效地收集到优质文章成为许多人的难题。我们将专心分享如何收集优质公众号文章的方法,为您揭示收集优质文章的独门技巧。 如何高效收集公众号优质文章 …

【java智慧工地源码】智慧工地物联网云平台,实现现场各类工况数据采集、存储、分析与应用

“智慧工地整体方案”以智慧工地物联网云平台为核心,基于智慧工地物联网云平台与现场多个子系统的互联,实现现场各类工况数据采集、存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块,根据现场管理实际需求灵活组合&#xff0…

【斗罗二】暗杀霍雨浩行动,马小桃霸气回击,江楠楠首秀武魂兔兔

Hello,小伙伴们,我是拾荒君。 《斗罗大陆Ⅱ绝世唐门》第25集更新了!和小伙伴们一样,一更新,拾荒君就急不可待地观看这一集。故事情节高潮迭起,尤其是霍雨浩与王冬面对六名杀手的惊险场景,真是让人心跳加速…

clip-path,css裁剪函数

https://www.cnblogs.com/dzyany/p/13985939.html clip-path - CSS:层叠样式表 | MDN 我们看下这个例子 polygon里有四个值分别代表这四个点相对于原图左上方的偏移量。 裁剪个五角星

《算法通关村——原来滑动窗口如此简单》

《算法通关村——原来滑动窗口如此简单》 基本思想 滑动窗口的思想非常简单,如下图所示,假如窗口的大小是3,当不断有新数据来时,我们会维护一个大小为3的一个区间,超过3的就将新的放入老的移走。 这个过程有点像火车…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示功能菜单应用

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示功能菜单应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单介绍掉…

将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目 有不同时间点的登录状态记录表state_log如下 请使用sql将其转化为如下表的不同时间段的相同登录状态记录 思路分析: 此类问题需要用到lag或lead函数取上下行对应的数据,然后对前后结果做比较打标签(0或1),再…

一文带你了解智能汽车车载网络通信安全架构2023-01-05

本文从汽车车载网络信息安全的角度出发,提出一种汽车车载网络通信安全架构方案,该方案通过构建多域分层入侵检测模型,实现预防—检测—预警的完整安全防护体系。 目前,智能化、网联化、电动化是汽车发展的大趋势,各大…

嵌入式 C 语言中的全局变量问题

大家好,今天分享一篇关于嵌入式C编程中全局变量问题的文章。希望对大家有所启发。 嵌入式特别是单片机os-less的程序,最易范的错误是全局变量满天飞。 这个现象在早期汇编转型过来的程序员以及初学者中常见,这帮家伙几乎把全局变量当作函数形…

vue 前端实现login页登陆 验证码

实现效果 // template <el-form :model"loginForm" :rules"fieldRules" ref"loginForm" label-position"left" label-width"0px" class"login-container"><span class"tool-bar"></sp…

02.PostgreSQL 查询处理期间发生了什么?

PostgreSQL 查询处理期间发生了什么&#xff1f; 文中主要内容引用自PostgreSQL指南&#xff1a;内幕探索 查询处理是PostgreSQL中最为复杂的子系统。如PostgreSQL官方文档所述&#xff0c;PostgreSQL支持SQL2011标准中的大多数特性&#xff0c;查询处理子系统能够高效地处理这…

uniapp-从后台返回的一串地址信息上,提取省市区进行赋值

1.这是接口返回的地址信息 2.要实现的效果 3.实现代码&#xff1a; <view class"address">{{item.address}}</view>listFun() {let url this.$url.url.positionInfoCompany;let param {page: this.page,limit: this.limit,keyword: this.keyword,};thi…

【概率统计】如何理解概率密度函数及核密度估计

文章目录 概念回顾浅析概率密度函数概率值为0&#xff1f;PDF值大于1&#xff1f;一个栗子 核密度估计如何理解核密度估计核密度估计的应用 总结 概念回顾 直方图&#xff08;Histogram&#xff09;&#xff1a;直方图是最直观的一种方法&#xff0c;它通过把数据划分为若干个区…

LINUX 嵌入式C编程--信号编程

基本概念 信号是事件发生时对进程的通知机制&#xff0c;也可以把它称为软件中断。信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程&#xff0c;其实是在软件层次上对中断机制的一种模拟。信号提供了一种处理异步事件的方法。 信号目的 **信号的目的是用来通信…

基于深度学习的肺炎CT图像检测诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在肺炎CT图像检测诊断方面具有广泛的应用前景。以下是关于肺炎CT图像检测诊断系统的介绍&#xff1a; 任务…

正确理解MySQL的MVCC及实现原理

&#xff01;首先声明&#xff0c;MySQL 的测试环境是 5.7 MVCC是MySQL实现RC(读已提交)、RR(可重复读)隔离级别的原理之一。 前提概要 什么是 MVCC 什么是当前读和快照读&#xff1f; 当前读&#xff0c;快照读和 MVCC 的关系 MVCC 实现原理 隐式字段 undo日志 Read Vie…

【linux】信号——信号保存+信号处理

信号保存信号处理 1.信号保存1.1信号其他相关概念1.2信号在内核中的表示 2.信号处理2.1信号的捕捉流程2.2sigset_t2.3信号集操作函数2.4实操2.5捕捉信号的方法 3.可重入函数4.volatile5.SIGCHLD信号 自我名言&#xff1a;只有努力&#xff0c;才能追逐梦想&#xff0c;只有努力…

C/C++---------------LeetCode第876. 链表的中间结点

链表的中间结点 题目及要求双指针在main内使用 题目及要求 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 示例 2&#xff1a; 双指针 思路&#xff1a;分别定义快慢指针…

2023.11.30 关于 MyBatis 动态 SQL 的使用

目录 引言 if 标签 trim 标签 where 标签 set 标签 foreach 标签 引言 动态 sql 是 MyBatis 的强大特性之一允许你根据输入的参数动态地构建 sql 语句从而在运行时根据不同的条件生成不同的 sql 核心思想 基于提供的数据和条件&#xff0c;能够修改、增加、删除 sql…