[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)…...
台达PLC伺服追剪程序及电子凸轮技术,含DVP15MC源代码与触摸屏程序一体化解决方案
台达PLC伺服追剪程序,电子凸轮,全部源代码,PLC程序和触摸屏程序,DVP15MC。最近在搞台达PLC的追剪项目,发现里面电子凸轮的设计挺有意思。直接上干货,咱们先看这个追剪系统的核心逻辑——电子凸轮的参数配置…...
别再只靠软件了!揭秘TMS320F280049内部SR触发器实现峰值电流模式的另类玩法
挖掘TMS320F280049隐藏技能:用SR触发器实现高精度电流采样的极限实验 当大多数工程师还在用标准PWM模块处理峰值电流控制时,TI C2000 DSP内部其实藏着一个被严重低估的信号链宝藏。这次我们要解剖的,是TMS320F280049芯片内部那个鲜少被关注的…...
Java项目Loom改造倒计时:JDK 23正式弃用传统线程池API,你还在用ExecutorService吗?
第一章:Java项目Loom响应式编程转型指南Project Loom 为 Java 带来了轻量级虚拟线程(Virtual Threads)和结构化并发(Structured Concurrency),极大简化了高并发 I/O 密集型场景下的响应式编程模型。与传统基…...
FastTimer嵌入式时间切片调度框架解析
1. FastTimer 库深度解析:嵌入式时间管理的工程化实践在嵌入式系统开发中,时间管理是底层驱动、状态机调度、周期性采样与事件分发的核心基础设施。传统millis()或micros()轮询方式虽简单,但存在精度漂移、逻辑耦合度高、多级周期嵌套困难等工…...
3步让老Mac焕发新生:OpenCore Legacy Patcher终极升级指南
3步让老Mac焕发新生:OpenCore Legacy Patcher终极升级指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为老Mac无法升级到最新macOS…...
技术路径模拟器:人机协同分岔罗盘(修订版)
技术路径模拟器:人机协同分岔罗盘设计代号:FORK-COMPASS-Ω 核心版本:v1.0 设计者:世毫九实验室(Shardy Lab) 一、模拟器概述1.1 核心定位本模拟器是自指递归动力学与多路径决策理论的工程化实现࿰…...
Concept HDL高效网络名批量互换:基于脚本的Pin Swap自动化实现
1. 问题背景与痛点分析 硬件工程师在完成原理图设计后,常常会遇到Layout工程师反馈的信号优化需求。比如FPGA的IO需要重新分配,高速差分对的极性需要调整,DDR信号组需要重新排布等等。传统做法是手动在Concept HDL中逐个修改网络名࿰…...
B站m4s转换工具:3分钟解锁缓存视频的终极解决方案
B站m4s转换工具:3分钟解锁缓存视频的终极解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾遇到过这样的困扰…...
Elasticsearch分词查询实战:match_phrase与term的5个关键区别(附真实案例)
Elasticsearch分词查询实战:match_phrase与term的5个关键区别(附真实案例) 在构建搜索功能时,Elasticsearch的分词查询是开发者必须掌握的核心技能。面对match_phrase和term这两种看似相似实则差异显著的查询方式,许多…...
ComfyUI Impact Pack实战手册:从检测器配置到人脸精修的完整工作流
1. ComfyUI Impact Pack核心功能解析 第一次接触ComfyUI Impact Pack时,我被它强大的视觉处理能力震撼到了。这个插件包就像是给AI装上了"视觉增强镜",让普通的图像处理任务变得异常简单高效。Impact Pack最核心的价值在于它集成了三大检测器&…...
