xxl-job 分布式调度学习笔记

1.概述

1.1什么是任务调度

业务场景:

  • 上午10点,下午2点发放一批优惠券
  • 银行系统需要在信用卡到期还款日的前三天进行短信提醒

  • 财务系统需要在每天凌晨0:10分结算前一天的财务数据,统计汇总

  • 不同系统间的数据需要保持一致,这时候需要执行数据同步

任务调度是为了自动完成特定的任务,在约定的特定时刻去执行任务的过程。

1.2 为什么需要分布式调度

使用Spring中提供的注解@Scheduled,也能实现调度的功能

在业务类中方法中贴上这个注解,然后在启动类上贴上`@EnableScheduling`注解

@Scheduled(cron = "0/20 * * * * ? ")
 public void doWork(){
 	//doSomething   
 }

感觉SprintBoot提供的注解可以完成任务调度的功能,好像已经完美的解决了问题,为什么还需要分布式调度呢?

主要以下几个原因:

  • 高可用:单机版的定式任务调度只能在一台机器上运行,如果程序或者系统出现异常就会导致功能不可用。
  • 防止重复执行:在单机模式下,定时任务是没什么问题的。但当我们部署了多台服务,同时又每台服务又有定时任务时,若不进行合理的控制在同一时间,只有一个定时任务启动执行,这时,定时执行的结果就可能存在混乱和错误了。
  • 单机处理极限:原本1分钟内需要处理1万个订单,但是现在需要1分钟内处理10万个订单;原来一个统计需要1小时,现在业务方需要10分钟就统计出来。你也许会说,你也可以多线程、单机多进程处理。的确,多线程并行处理可以提高单位时间的处理效率,但是单机能力毕竟有限(主要是CPU、内存和磁盘),始终会有单机处理不过来的情况。

1.3 XXL-JOB介绍

XXL-JOB是大众点评的分布式调度平台,是一个轻量级的分布式任务调度平台,其核心设计目标是:开发迅速、学习简单、轻量级、易扩展。

大众点评目前已经接入xxl-job任务调度平台,该系统已经调度100万次,表现优异。

目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,360金融 (360),联想集团 (联想),易信 (网易)等等

官网地址:https://www.xuxueli.com/xxl-job/

系统架构图:

设计思想:

  • 将调度行为抽象成“调度中心”公共平台,而平台自身并不承担业务逻辑,调度中心负责发起调度请求
  • 将任务抽象成分散的JobHandler,交由“执行器”统一管理,执行器负责接收调度请求并执行对应的JobHandler中的业务逻辑

因此,调度和任务两部分可以相互解耦,提供系统整体的稳定性和扩展性。

链路: 调度中心 ----> 执行器 -----> JobHandler

2.快速入门

2.1 下载源码

源码下载地址:

  • https://github.com/xuxueli/xxl-job
  • https://gitee.com/xuxueli0323/xxl-job

2.1 初始化调度数据库

下载源码后,解压源码,sql文件位置:

/xxl-job/doc/db/tables_xxl_job.sql

默认的database库名: xxl_job

数据库中表介绍:

  • xxl_job_group:执行器信息表,维护任务执行器信息;
  • xxl_job_info:用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
  • xxl_job_lock:任务调度锁表;
  • 调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
  • xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
  • xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
  • xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
  • xxl_job_user:系统用户表;
  数据库中表介绍:

  - 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_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
  - xxl_job_user:系统用户表;

2.2 编译源码

2.2.1 源码目录解释:

  1. doc :文档资料
  2. xxl-job-admin :调度中心,项目源码
  3. xxl-job-core :公共Jar依赖
  4. xxl-job-executor-samples :执行器,Sample示例项目(大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目)

2.2.2 源码需要改动的点:

  1. application.properties修改数据库连接信息,用户信息和密码
    jdbc:mysql://127.0.0.1:3306/xxl-job2
  2. logback.xml修改日志路径信息:/data/applogs/xxl-job/xxl-job-admin.log-->./data/applogs/xxl-job/xxl-job-admin.log

2.2.3 启动成功后,访问:http://localhost:8080/xxl-job-admin/

2.3 配置部署调度中心

2.3.1 调度中心配置
2.3.2 部署项目

2.4 配置部署执行器项目

2.4.1 添加Maven依赖
2.4.2 执行器配置
2.4.3 添加执行器配置
2.4.4 添加任务处理类

2.5 运行HelloWorld程序

2.5.1 任务配置&触发执行
2.5.2 查看日志

2.6 GLUE模式(Java)

2.7 执行器集群

2.7.1 集群环境搭建
2.7.2 调度路由算法讲解

3. 分片功能讲解

3.1 案例需求讲解

3.1.1 初始化数据
3.1.2 集成Druid&MyBatis
3.1.3 业务功能实现

3.2 分片概念讲解

3.3 案例改造成任务分片

4. 项目集成XXL-JOB

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.2 内容管理模块 - 课程分类、新增课程、修改课程

内容管理模块-课程分类、新增课程、修改课程 文章目录 内容管理模块-课程分类、新增课程、修改课程一、课程分类1.1 课程分类表1.2 查询树形结构1.2.1 表自连接1.2.2 SQL递归 1.3 Mapper1.4 Service1.5 Controller1.6 效果图 二、添加课程2.1 需求分析2.2 数据表2.2.1 课程基础…

html之CSS的高级选择器应用

文章目录 一、CSS高级选择器有哪些呢?二、高级选择器的应用1、层次选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器 2、结构伪类选择器(不常用)3、属性选择器E[attr]E[attrval]E[attr^val]E[attr$val]E[attr*val] 一、CSS高级选择器有…

LeetCode 每日一题 Day 13 || BFS

2415. 反转二叉树的奇数层 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] ,那么反转后它应该变成 [18,29,11,7,4,3,1,2] 。 反转后,返回树的根…

NLP论文阅读记录-ACL 2023 | 10 Best-k Search Algorithm for Neural Text Generation

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1优势2.2 挑战 三.本文方法3.1 并行探索3.2 时间衰变3.3堆修剪3.4 模型得分 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果 五 总结 前言 用于神经文本生成…

安全生产隐患排查治理信息化系统软件

安全隐患排查系统实现对重大危险源企业、安全隐患信息的登记、整改、复查、分类和统计。系统涵盖了安全隐患排查整治工作的各项基本内容,实现以安全隐患排查整治业务流为主线,处理流程简洁清晰、快速灵活;以排查整治流程为干线,快…

Linux--学习记录(3)

G重要编译参数 -g(GDB调试) -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息,以调试程序编译带调试信息的可执行文件g -g hello.c -o hello编译过程: -E(预处理) g -E hello.c -o hello.i-S(编…

基于springboot+vue 的智能物流管理系统

简介 基于springbootvue 的智能物流管理系统 适用于 设计,课程设计参考与学习用途。仅供学习参考。 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料 **项目编号:springboot074 ** **…

算法专题二:滑动窗口

算法专题二:滑动窗口 一.长度最小的子数组:1.思路一:暴力解法2.思路二:滑动窗口双指针3.GIF题目解析:思路一:思路二: 二.无重复字符的最长子串:1.思路一:滑动窗口2.GIF题…

制作一个多行时正确宽度的Textview,Android Textview 换行时宽度过长 右侧空白区域挤掉页面元素的解决方案

优化 Android 布局:创建自适应宽度的 TextView 引言 在Android应用开发中,布局优化是提升应用性能和用户体验的关键环节之一。特别是对于那些内容密集型的应用,如何高效地展示和管理文本内容成为了一个挑战。最近,在处理一个布局…

【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《数据结构奇遇记》🔖墨香寄清辞:墨痕寄壮志,星辰梦未满。 通幽径心凝意,剑指苍穹势如山。 目录 🌞1. 模式匹配的基本概念…

Scala多线程爬虫程序的数据可视化与分析实践

一、Scala简介 Scala是一种多种类型的编程语言,结合了针对对象编程和函数式编程的功能。它运行在Java虚拟机上,具有强大的运算能力和丰富的库支持。Scala常用于大数据处理、并发编程和Web应用程序开发。其灵活性和高效性编程成为编写多线程爬虫程序的理…

科技云报道:至简至强,新一代服务器的算力美学

科技云报道原创。 在这个时代,数据和计算的边界正在迅速扩张。 随着云计算、物联网和人工智能的日益成熟,对算力的需求已经突破了传统的限制,进入了一个全新的阶段。在这个阶段,不仅是算力的量级发生了变化,其性质和…

Mysql之约束上篇

Mysql之约束上篇 约束的概述为什么需要约束什么是约束约束的分类 非空约束作用关键字特点添加非空约束删除非空约束 唯一性约束关键字特点添加唯一约束关于复合唯一约束删除唯一约束查看索引 主键约束(非空唯一性约束)作用关键字特点添加主键约束关于复合主键删除主 约束的概述…

【MYSQL】-库的操作

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

[单片机软件]1.keil调整Group中的位置挪动

1.找到并选择箭头所指图标: 2.选中箭头所指进行你想要的Group进行移动 以上均为实测有效。

百度云IOCR自定义模版分类器进行文字识别(非通用文字识别)

模版管理 云账号登录 访问模版管理地址:点击下面地址新建模版 百度智能云-登录https://ai.baidu.com/iocr?castk4819agr76c7d09971d248#/templatelist/1 添加模版 如果有模版,识别效果不理想可以编辑上述模版,如果新的报表格式可以新建模…

如何访问AWS私有网络中的RDS (Mysql)

文章目录 小结问题及解决连接问题如何使用本地的Mysql Workbench对RDS进行访问 参考 小结 在AWS私有网络中部署了RDS (Mysql), 尝试通过外网成功地进行了访问. 问题及解决 连接问题 在AWS私有网络中部署了RDS (Mysql), 进行外网进行访问碰到了各种问题. 以下连接超时&…

【05】GeoScene海图或者电子航道图批量出图

出单张000数据参考上一篇博客,如果想同时出多张海图000数据,也是可以实现的。思路如下: 1 批量创建产品 GeoScene海事模块通过ProductDefinitions表和ProductCoverage要素类定义产品和AOI覆盖区,可支持批量导入产品信息和AOI覆盖…

@RequestMapping注解与其派生注解接收参数详解

一、前言 根据 HTTP 标准,HTTP 请求可以使用多种请求方法。 HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。 HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。 RequestMapping注解与其派生注解 在…

网络环境搭建及uboot配置

网络环境搭建 搭建网络环境可以搭建公网的也可以搭建局域网的,这里搭建的是局域网的。 详细看实验手册第一个实验 系统移植实验手册 linux内核的安装与加载 这一章节主要分为两大块:一个为产品阶段即:Linux内核、根文件系统、uboot全部存储到…