13.XXL-JOB应用

XXL-JOB应用

1.介绍

XXL-JOB是大众点评员工徐雪里于2015年发布的分布式任务调度平台

2.XXL-JOB与Quartz的关系

老版本依赖Quartz的定时任务触发,在V2.1.0版本开始移除了Quartz

3.官方地址

  • 官方文档:https://www.xuxueli.com/xxl-job/
  • gitee:https://gitee.com/xuxueli0323/xxl-job
  • github:https://github.com/xuxueli/xxl-job/
  • dockerhub:https://hub.docker.com/r/xuxueli/xxl-job-admin/

4.设计思想

  • 将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求
  • 将任务抽象成分散的JobHandler,交友“执行器”统一管理
  • “执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑
  • 因此,“调度”和“任务”两部分可以互相解耦,提高系统整体稳定性和扩展性

5.架构

调度中心

  • 负责管理调度的信息,按照调度的配置来发出调度请求
  • 支持可视化,简单的动态管理调度信息,包括新建,删除,更新等,这些操作都会实时生效,同时也支持监控调度结果以及执行日志

执行器

负责接收请求并且执行任务的逻辑。任务模块专注于任务的执行操作等等,使得开发和维护更加简单与高效

图示

在这里插入图片描述

6.特点

  • 调度中心HA(中心式):调度采用了中心式进行设计,“调度中心”支持集群部署,可保证调度中心HA
  • 执行器HA(分布式):任务分布式的执行,任务执行器支持集群部署,可保证任务执行HA
  • 触发策略:用cron触发,固定间隔触发,固定延时触发,API事件触发,人工触发,父子任务触发
  • 路由策略:执行器在集群部署的时候提供了丰富的路由策略,如:第一个,最后一个,轮询,随机,一致性Hash,最不经常使用LFU,最久未使用LRU,故障转移等等
  • Rolling实时日志的监控:支持rolling方式查看输入的完整执行日志
  • 脚本任务:支持GLUE模式开发和运行脚本任务,包括Shell,python,node.js,php等等类型脚本

7.源码

版本

V2.3.0

下载地址

https://github.com/xuxueli/xxl-job/releases/tag/2.3.0

源码目录介绍

  • doc:xxl-job的文档资料,包括了数据库的脚本
  • xxl-job-core:公共jar包依赖
  • xxl-job-admin:调度中心,项目源码,是SpringBoot项目,可以直接启动
  • xxl-job-executor-samples:执行器,是Sample实例项目,里面的SpringBoot工程可以直接启动,也可以在该项目的基础上进行开发,也可以将现有的项目改造为执行器项目

表介绍

  • xxl_job_group:执行器信息表,用于维护任务执行器的信息
  • xxl_job_info:调度扩展信息表,主要是用于xxl-job的调度任务的扩展信息,比如说像任务分组,任务名,机器的地址等等
  • xxl_job_lock:任务调度锁表
  • xxl_job_log:日志表,主要是用在保存xxl-job任务调度历史信息,像调度结果,执行结果,调度入参等
  • xxl_job-log_report:日志报表,会存储xxl-job任务调度的日志报表,会在调度中心里的报表功能里使用到
  • xxl_job_logglue:任务的GLUE日志,用于保存GLUE日志的更新历史变化,支持GLUE版本的回溯功能
  • xxl_job_user:系统的用户表

8.部署

方式总览

  • 手动部署
  • Docker部署

部署架构图

在这里插入图片描述

手动部署

步骤
  • 拉取源码
  • 从源码中获取sql文件并执行
  • 配置源码中的数据库路径信息
  • 启动admin应用
拉取源码

省略…上面给了源码地址下载即可

从源码中获取sql文件并执行

在这里插入图片描述
在这里插入图片描述

配置源码中的数据库路径信息

在这里插入图片描述

启动admin应用

省略…就是个SpringBoot应用直接执行就行

Docker部署

# 拉取镜像,建议加版本
docker pull xuxueli/xxl-job-admin# 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value  --key2=value2" ;
# 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:{指定版本}

测试是否部署成功

访问调度中心控制台,能进去就算成功

  • 地址:ip:8080/xxl-job-admin
  • 默认账号密码:admin/123456

在这里插入图片描述
在这里插入图片描述

服务端配置文件详解

### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 报警邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### 调度中心通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;
xxl.job.i18n=zh_CN
## 调度线程池最大线程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;
xxl.job.logretentiondays=30

9.SpringBoot整合XXL-JOB

依赖

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.0</version>
</dependency>

application.properties添加配置

### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30

配置类

@Bean
public XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;
}

基础知识

在这里插入图片描述

创建Job方法

在这里插入图片描述

页面创建任务

在这里插入图片描述

注意

SpringBoot项目启动后,执行器上显示在线机器一般要等30秒左右才回显的地址

页面执行任务

在这里插入图片描述

10.执行器多节点执行

介绍

执行器有多个然后同一个任务,调度中心去调度多个执行器

本机执行器多节点部署

  • 程序端口修改
  • 执行器端口修改
# 第一个要改的配置
server.port=8080
# 第二个要改的配置
xxl.job.executor.port=9999

执行

在这里插入图片描述

11.调度任务参数传递

介绍

在页面运行一个任务的时候可以编辑这个任务执行的时候传递的参数,然后再执行器的应用中使用XxlJobHelper.getJobParam()方法获得参数

UI界面设置

在这里插入图片描述

代码

在这里插入图片描述

12.调度任务日志打印与查看

介绍

调度任务的时候可以在代码里面打印一些日志,然后控制台上可以方便查看

代码

在这里插入图片描述

UI界面

在这里插入图片描述
在这里插入图片描述

13.自主设置调度任务执行结果

介绍

存在调度是否成功与执行是否成功,那么如何控制任务执行是否成功呢
在这里插入图片描述

默认情况

方法任务结果为”成功“,不需要主动设置

自主设置任务结果

  • 设置任务结果为失败:XxlJobHelper.handleFail
  • 设置任务结果成功:handleSuccess

14.调度中心集群部署

图示

在这里插入图片描述

执行器配置调度中心集群

在这里插入图片描述

15.任务分片

需求

  • 有一个任务需要处理100w条数据,每条数据的业务逻辑处理要0.1s
  • 对于普通任务来说,只有一个线程来处理,可能需要10万秒才能处理完,业务则严重收到影响
  • 案例:双十一大促,给1000万用户发营销短信

什么是分片任务

执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务

“分片广播” 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度

Java语言任务获取分片参数方式

// 可参考Sample示例执行器中的示例任务"ShardingJobHandler"了解试用 
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal();

脚本语言任务获取分片参数方式

// 脚本任务入参固定为三个,依次为:任务传参、分片序号、分片总数。以Shell模式任务为例,获取分片参数代码如下
echo "分片序号 index = $2"
echo "分片总数 total = $3"

分片参数说明

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

应用场景

  • 分片任务场景:10个执行器的集群来处理10w条数据,每台机器只需要处理1w条数据,耗时降低10倍
  • 广播任务场景:广播执行器机器运行shell脚本、广播集群节点进行缓存更新等

16.访问令牌

介绍

为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯

设置方式

调度中心和执行器,可通过配置项 “xxl.job.accessToken” 进行AccessToken的设置

正常通讯的两种情况

调度中心和执行器,如果需要正常通讯,只有两种设置;

  • 调度中心和执行器,均不设置AccessToken;关闭安全性校验
  • 调度中心和执行器,设置了相同的AccessToken

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

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

相关文章

面试经典 150 题 - 多数元素

多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1…

搜索引擎优化:利用Python爬虫实现排名提升

什么是搜索引擎优化&#xff08;SEO&#xff09; 搜索引擎优化&#xff08;SEO&#xff09;是通过优化网站内容和结构&#xff0c;提高网站在搜索引擎中的排名&#xff0c;从而增加网站流量和曝光度的技术和方法。SEO的目标是使网站在搜索引擎结果页面中获得更高这个过程包括吸…

windows11上安装虚拟机VMware

1、安装虚拟机&#xff08;待补充&#xff09; 第二步&#xff1a;安装VMware tools 实现windows文件上传到虚拟机中 1、安装好虚拟机后&#xff0c;查看虚拟机ip用Xshell连接虚拟机&#xff0c;并安装VMware tools(只有安装了VMware tools才能实现虚拟机和本机的文件共享。在…

python:socket基础操作(2)-《udp发送信息》

基础发送udp信息 1.导入socket模块 2.使用udp模块 3.发送内容 4.关闭套接字 很简单的4步就可以实现udp的消息发送 import socket # 导入模块udp_socket socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 使用ipv4 udp协议udp_socket.sendto(b"hello world",(&…

Bit Extraction and Bootstrapping for BGV/BFV

参考文献&#xff1a; [GHS12] Gentry C, Halevi S, Smart N P. Better bootstrapping in fully homomorphic encryption[C]//International Workshop on Public Key Cryptography. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 1-16.[AP13] Alperin-Sheriff J, Pe…

爬虫requests+综合练习详解

Day2 - 1.requests第一血_哔哩哔哩_bilibili requests作用&#xff1a;模拟浏览器发请求 requests流程&#xff1a;指定url -> 发起请求 -> 获取响应数据 -> 持续化存储 爬取搜狗首页的页面数据 import requests# 指定url url https://sogou.com # 发起请求 resp…

Leetcode刷题笔记题解(C++):670. 最大交换

思路&#xff1a; 假设数字 9923676 从右边找最大的数字的下标maxindex&#xff0c;然后向左边寻找小于最大数字的数的下标&#xff0c;直到找到最左边&#xff0c;交换两者得出新的数字&#xff0c;比如从左到右递减的数字如9621则不需要变化&#xff0c;在寻找中记录这种数…

系统问题排查定位流程

1. 系统问题排查范围定义 本次交流中描述的故障&#xff0c;主要是指系统级别的故障&#xff0c;对于某个具体的业务功能的故障&#xff0c;不在本次讨论范围内。下面描述的故障定位、排查&#xff0c;主要是指跨模块、跨项目级别的故障的定位、排查&#xff0c;包括软件、硬件…

LeetCode 热题 100 | 滑动窗口

目录 1 3. 无重复字符的最长子串 2 438. 找到字符串中所有字母异位词 菜鸟做题第二周&#xff0c;语言是 C 1 3. 无重复字符的最长子串 解题思路&#xff1a; 设置两个指针&#xff0c;左指针和右指针&#xff0c;二者之间形成窗口右指针不断右移&#xff0c;新字母被纳…

阿里云优惠整理,最新2024阿里云优惠政策解读

阿里云优惠政策有哪些&#xff1f;2024年阿里云优惠政策风向改了&#xff0c;之前一直是老用户与狗的营销策略&#xff0c;今年阿里云2核2G、3M固定带宽服务器99元居然开启了老用户购买权限&#xff0c;并且续费不涨价&#xff0c;阿里云这波操作确实让用户赢麻了&#xff0c;在…

X-Bogus加密参数分析与jsvmp算法(仅供学习)

文章目录 1. 抓包分析2. X-Bogus参数分析 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关注《爬虫…

任意模数多项式乘法MTT(可拆系数FFT)详解

更好的阅读体验 任意模数多项式乘法 前言&#xff1a; 在教练讲的时候脑子并不清醒&#xff0c;所以没听懂。后来自己看博客学会了&#xff0c;但目前只学了一种方法&#xff1a;可拆系数FFT。为了方便日后复习&#xff0c;决定先写下这个的笔记&#xff0c;关于三模数NTT下次…

【Linux】常见指令(一)

前言: Linux有许多的指令&#xff0c;通过学习这些指令&#xff0c;可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…

【胡寿松 自动控制原理】【考研冲刺加分神器】各院校考研例题详细讲解

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    本专栏中包含【胡寿松 自动控制原理】专业课的例题讲解&#xff0c;适合考研冲刺阶段学习&#xff0c;该视频只适合作为辅助教学视频来使用&#xff0c…

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock 一种情况说明 挂载ISO文件进入救援模式&#xff0c;无法挂载XFS文件系统&#xff0c;xfs_repair也是报未知的超级块 使用 xfs_info 可以取到 xfs文件系统分区信息 xfs_db -c “sb 0” -c “p” $your_xfs_dev 也能…

笔试面试题——二叉树进阶(三)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、二叉树的前序非递归遍历1、题目讲解2、思路讲解3、代码实现 二、二叉树的中序非递归遍历1…

GitHub README-Template.md - README.md 模板

GitHub README-Template.md - README.md 模板 1. README-Template.md 预览模式2. README-Template.md 编辑模式References A template to make good README.md. https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 1. README-Template.md 预览模式 2. README-Templat…

go语言(十三)-----interface

一、Interface 通用万能类型 空接口int&#xff0c;string&#xff0c;float&#xff0c;struct都实现了interface都可以用interface{}类型,引用任意的数据类型 package mainimport "fmt"//interface()是万能数据类型 func myFunc(arg interface{}) {fmt.Println(&…

续签KES证书

MiniO KES&#xff08;密钥加密服务&#xff09;是 MinIO 开发的一项服务&#xff0c;旨在弥合在 Kubernetes 中运行的应用程序与集中式密钥管理服务 &#xff08;KMS&#xff09; 之间的差距。中央 KMS 服务器包含所有状态信息&#xff0c;而 KES 在需要执行与获取新密钥或更新…

Med-YOLO:3D + 医学影像 + 检测框架

Med-YOLO&#xff1a;3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码&#xff1a;加强小目标检测总结 提出背景 论文链接&#xff1a;https://arxiv.org/abs/2312.07729 代码链接&#xff1a;https://github.com/JDSobek/MedYOLO 提出背景&…