[Java 探索者之路] 一个大厂都在用的分布式任务调度平台
分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统,在此环境下,各个任务可以在独立的节点上运行。它有助于提升资源利用率,增强系统扩展性以及提高系统对错误的容忍度。
文章目录
- 1. 分布式任务调度平台
- 1. 基本概念
- 1.1 任务调度
- 1.2 分布式计算
- 2. 分布式任务调度平台的功能
- 3. 分布式任务调度平台的应用场景
- 4. 简而言之
- 2. 什么是 xxl-job
- 2.1 XXL-JOB的架构
- 3. xxl-job 的简单使用
- 1. 源码拉取
- 2. 启动 db
- 3. 初始化调度中心数据库
- 4. 修改调度中心的数据库配置以及 logback 的日志地址
- 5. 成功启动调度中心
- 6. 打开调度中心的 web 页面
- 7. 启动示例执行器代码
- 8. 随便找一个任务注册
- 9. 查看日志信息,发现执行结果失败了
- 10. 回去看一眼源码,发现是
1. 分布式任务调度平台
1. 基本概念
1.1 任务调度
任务调度,是指在多任务的环境下,合理地分配系统资源,调度各个任务在什么时候,由哪一个处理器处理,以达到满足用户需求、提高系统资源利用率、提高系统吞吐量的目的。
1.2 分布式计算
分布式计算是指多个计算机系统之间通过网络连接,共享系统资源来实现高性能计算的技术。这种计算技术可以应对大数据量、高并发量、高I/O的场景。
2. 分布式任务调度平台的功能
分布式任务调度平台主要用于管理和调度任务,其主要功能包括:
- 任务调度:按照预设的规则(如:时间点、时间间隔等)触发任务的执行。
- 负载均衡:根据系统的负载情况,自动调整任务在各节点间的分配,均衡各节点的负载。
- 容错处理:当某个节点出现故障时,能自动将该节点上的任务转移到其他节点上执行。
- 任务监控:能够实时监控任务的运行状况,如运行时间、运行结果等。
3. 分布式任务调度平台的应用场景
以下是一些常见的应用场景:
- 定时任务:在特定时间执行某项任务,例如每天晚上12点备份数据库。
- 周期性任务:周期性地执行某项任务,例如每隔一小时统计网站的访问量。
- 流量控制:在系统流量大量增长时,分布式任务调度平台可以按照预定的规则,调度更多的资源来处理任务,以应对流量峰值。
总的来说,分布式任务调度平台是大型分布式系统不可或缺的一部分,是分布式环境中任务管理的关键组件。
4. 简而言之
分布式调度平台,就是有个老大决定一个定时任务在多台机器中的哪一台机器执行。
2. 什么是 xxl-job
XXL-JOB是一个全功能、高扩展性的开源分布式任务调度框架,也是一个优秀的定时任务调度平台,给开发者带来便捷的定时任务管理和控制能力。它的核心目标是开发迅速、学习简单、轻量级、易扩展。

2.1 XXL-JOB的架构
XXL-JOB的系统架构设计清晰明了,可以粗略的分为三层:
- 调度中心:调度中心是XXL-JOB的核心,负责触发调度操作,同时提供操作界面。
- 执行器:执行器是任务运行的载体,负责接收调度中心的触发信号并执行相应的任务。
- 调度数据库:用于记录调度信息,如任务信息、调度日志等。
值得一提的是,XXL-JOB支持自定义任务处理逻辑,得益于这一点,它能用于各种场景,例如常见的数据同步、数据清洗等。

3. xxl-job 的简单使用
进入(xxl-job 的官网) ,如果想了解下的可以了解下,不想了解的就直接开始吧。
因为是开源项目,所以我接下来也是直接拉取的源码进行实验。如果是线上环境建议使用容器进行集群部署。
1. 源码拉取
- 打开 github 官网,选择 realease 版本,因为 master 可能存在不稳定代码,但是实验嘛,其实也无所谓。https://github.com/xuxueli/xxl-job/
- 获取到下载链接进行下载

- 拉取到的项目结构大概是以下这样,其中
docker目录是我docker-compose的数据库相关文件,方便测试。

以下是我的 docker-compose相关文件信息

2. 启动 db
进入到指定目录 docker 目录, 一键启动目录

3. 初始化调度中心数据库
复制源码文件中的 db 文件到数据库中执行初始化。

我这里就直接到 http://127.0.0.1:3307phpmyadmin 进行数据库操作了。
执行前后

4. 修改调度中心的数据库配置以及 logback 的日志地址


5. 成功启动调度中心

6. 打开调度中心的 web 页面
浏览器打开 http://127.0.0.1:8080/xxl-job-admin/, 输入初始账号 admin 密码 123456

登录成功

7. 启动示例执行器代码

可以看到启动了两个服务分别在 9998的无框架服务以及 9999的 spring 项目。回到调度中心的 web 页面,你会发现两个执行器已经自动注册到了调度中心。

在数据库中的表现为

此时,假如我们去修改其中一个调度器的名称,重新启动会怎样呢?

可以看到只剩 9999 的服务

这时候我们需要手动把新的执行器添加上。

刷新可以看到新的执行器自动注册

8. 随便找一个任务注册


启动任务

9. 查看日志信息,发现执行结果失败了

10. 回去看一眼源码,发现是

相关文章:
[Java 探索者之路] 一个大厂都在用的分布式任务调度平台
分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统,在此环境下,各个任务可以在独立的节点上运行。它有助于提升资源利用率,增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…...
基于JAVA springboot+mybatis智慧生活分享平台设计和实现
基于JAVA springbootmybatis智慧生活分享平台设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…...
详细了解C++中的namespace命名空间
键盘敲烂,月薪过万,同学们,加油呀! 目录 键盘敲烂,月薪过万,同学们,加油呀! 一、命名空间的理解 二、::作用域运算符 三、命名空间(namespace&…...
#WEB前端(HTML属性)
1.实验:a,img 2.IDE:VSCODE 3.记录: a: href插入超链接 默认情况下在本窗口打开链接, target可以设置打开的窗口,parent在父窗口打开,blank新开串口打开,top在顶层串口打开,self为默认在本窗口打开 img: 插入图片 可以插…...
LeetCode---【和的操作】
目录 两数之和我的答案在b站up那里学到的【然后自己复写】 和为 K 的子数组在b站up那里学到的【然后自己复写】 三数之和在b站up那里学到的【然后自己复写】 两数相加【链表】我的半路答案:没有看到是链表在b站up那里学到的【复写失败后整理】 两数之和 我的答案 …...
Docker容器与虚拟化技术:OpenEuler 使用 docker-compose 部署 LNMP
目录 一、实验 1.环境 2.OpenEuler 部署 docker-compose 3.docker-compose 部署 LNMP 二、问题 1.ntpdate未找到命令 2.timedatectl 如何设置时区与时间同步 3.php网页显示时区不对 一、实验 1.环境 (1)主机 表1 主机 系统架构版本IP备注Lin…...
13-微服务初探-自研微服务框架
微服务初探 1. 架构变迁之路 1.1 单体架构 互联网早期,一般的网站应用流量较小,只需要一个应用,将所有的功能代码都部署在一起就可以,这样可以减少开发,部署和维护的成本。 比如说一个电商系统,里面包含…...
LeetCode——二叉树(Java)
二叉树 简介[简单] 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历二叉树层序遍历[中等] 102. 二叉树的层序遍历[中等] 107. 二叉树的层序遍历 II[中等] 199. 二叉树的右视图[简单] 637. 二叉树的层平均值[中等] 429. N 叉树的层序遍历[中等] 515. 在每个…...
LDR6328芯片:智能家居时代的小家电充电革新者
在当今的智能家居时代,小家电的供电方式正变得越来越智能化和高效化。 利用PD(Power Delivery)芯片进行诱骗取电,为后端小家电提供稳定电压的技术,正逐渐成为行业的新宠。在这一领域,LDR6328芯片以其出色的…...
用node写后端环境运行时报错Port 3000 is already in use
解决方法:关闭之前运行的3000端口,操作如下 1.WindowR输入cmd确定,打开命令面板 2.查看本机端口详情 netstat -ano|findstr "3000" 3.清除3000端口 taskkill -pid 41640 -f 最后再重新npm start即可,这里要看你自己项目中package.joson的启动命令是什…...
Git 如何上传本地的所有分支
Git 如何上传本地的所有分支 比如一个本地 git 仓库里定义了两个远程分支,一个名为 origin, 一个名为 web 现在本地有一些分支是 web 远程仓库没有的分支,如何将本地所有分支都推送到 web 这个远程仓库上呢 git push web --all...
【airtest】自动化入门教程(一)AirtestIDE
目录 一、下载与安装 1、下载 2、安装 3、打开软件 二、web自动化配置 1、配置chrome浏览器 2、窗口勾选selenium window 三、新建项目(web) 1、新建一个Airtest项目 2、初始化代码 3、打开一个网页 四、恢复默认布局 五、新建项目…...
ChatGPT支持下的PyTorch机器学习与深度学习技术应用
近年来,随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生,人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术,在许多行业都取得了颠覆性的成果。另外,近年来,Pytorch深度学习框架受…...
Springboot+vue的医药管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的医药管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层…...
C语言:预处理
C语言:预处理 预定义符号#define定义常量定义宏宏与函数对比 #操作符##操作符条件编译头文件包含库文件包含本地文件包含嵌套文件包含 预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。 __FILE__ //…...
计算机网络:路由协议
路由协议简介 路由协议是计算机网络中不可或缺的一部分,它们负责确定数据包从源地址到目的地址的最佳路径。想象一下,如果你是一个数据包,路由协议就像是地图或导航工具,指导你如何到达目的地。 目录 路由协议简介 工作原理简化…...
经典动态规划题目leetcode322. 零钱兑换
题目链接:https://leetcode.cn/problems/coin-change/description/ 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合…...
python 使用curl_cffi 绕过jax3指纹-Cloudflare 5s盾
现在越来越多的网站已经能够通过JA3或者其他指纹信息,来识别你是不是爬虫了。传统的方式比如换UA,加代理是没有任何意义了,所以这个时候我们就需要使用到curl_cffi 了。 1.TLS 指纹是啥? 在绝大多数的网站都已经使用了 HTTPS&am…...
Python3学习笔记39-passlib
passlib处理密码哈希的python包,支持很多哈希算法和工具 bcrypt 安装 pip install passlib[bcrypt] 会安装passlib包和bcrypt两个包 密码哈希与校验 from passlib.context import CryptContext# 创建CryptContext对象,指定加密算法 pwd_context CryptContext…...
Matlab 机器人工具箱 动力学
文章目录 R.dynR.fdynR.accelR.rneR.gravloadR.inertiaR.coriolisR.payload官网:Robotics Toolbox - Peter Corke R.dyn 查看动力学参数 mdl_puma560; p560.dyn;%查看puma560机械臂所有连杆的动力学参数 p560.dyn(2);%查看puma560机械臂第二连杆的动力学参数 p560.links(2)…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
前端异步编程全场景解读
前端异步编程是现代Web开发的核心,它解决了浏览器单线程执行带来的UI阻塞问题。以下从多个维度进行深度解析: 一、异步编程的核心概念 JavaScript的执行环境是单线程的,这意味着在同一时间只能执行一个任务。为了不阻塞主线程,J…...
