论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
物联网
›
物联网
›
简单介绍分布式定时任务XXL-JOB
简单介绍分布式定时任务XXL-JOB
数据人与超自然意识
论坛元老
|
7 天前
|
显示全部楼层
|
阅读模式
楼主
主题
1886
|
帖子
1886
|
积分
5658
XXL-JOB 由 调度中央 和 实行器 两大部分组成。调度中央主要负责任务管理、实行器管理以及日志管理
实行器主要是吸收调度信号并处理。另外,
调度中央进行任务调度时,是通过自研 RPC 来实现的
不同于 Elastic-Job 的去中央化计划, XXL-JOB 的这种计划也被称为中央化计划
(调度中央调度多个实行器实行任务)
和 Quzrtz 雷同 XXL-JOB 也是基于
数据库锁调度任务
,存在性能瓶颈
acessToken
是
实行器
要连
接到我们的调度中央
的时间,要使用一个雷同的token
Bean模式
就是我们通过xxl-job注解内里的bean的名字,去查找对应的不同的方法
不过,一般在任务量不是特别大的情况下,没有什么影响的,可以满足绝大部分公司的要求。不要被 XXL-JOB 的架构图给吓着了,实际上,我们要用 XXL-JOB 的话,
只需要重写
IJobHandler
自界说任务实行逻辑就可以了,非常易用
@JobHandler(value="myApiJobHandler")
@Component
public class MyApiJobHandler extends IJobHandler {
@Override
public ReturnT<String> execute(String param) throws Exception {
//......
return ReturnT.SUCCESS;
}
}
复制代码
直接基于注解界说任务
@XxlJob("myAnnotationJobHandler")
public ReturnT<String> myAnnotationJobHandler(String param) throws Exception {
//......
return ReturnT.SUCCESS;
}
复制代码
优缺点总结:
优点:开箱即用(学习资本比较低)、与 Spring 集成、支持分布式、支持集群、支持任务可视化管理。
缺点:不支持动态添加任务(假如一定想要动态创建任务也是支持的,拜见:xxl-job issue277)。
xxl-job实行器原理
xxl-job分成两个部分,一个是调度中央,一个是实行器
XXL-JOB 的实行器本身不负责任务调度,调度由调度中央(Admin)完成。调度中央根据任务配置的触发规则(如 Cron 表达式)触发任务,并通过 RPC 调用将任务分发给对应的实行器。
调度中央
:负责管理任务配置、触发任务、监控任务状态。
实行器
:吸收调度中央的请求,实行详细的任务逻辑
任务实行流程
实行器吸收到调度中央的请求后,会通过以下步调实行任务:
任务剖析
:
实行器剖析调度中央通报的任务参数(如任务 ID、任务参数等)。
根据
任务 ID 找到对应的任务处理器(JobHandler)
。
任务处理器实行
:
实行器调用预先注册的任务处理器(JobHandler)的
execute
方法(@XxlJob的底层也是这个)
。
任务处理器实行业务逻辑,并返回实行效果。
效果回调
:
实行器
将任务实行效果通过 HTTP 回调给调度中央
。
调度中央记录任务实行状态(乐成、失败、重试等)
任务注册与发现
实行器启动时,会向调度中央注册本身,并上报本身支持的任务列表。调度中央通过注册信息知道哪些任务可以由哪些实行器实行。
注册机制
:
实行器启动时,会调用调度中央的注册接口,
上报本身的地址(AppName)和支持的任务列表
。
调度中央将实行器的信息存储到数据库中
发现机制
:
调度中央根据任务配置的
AppName
,找到对应的实行器地址,并将任务分发给该实行器
心跳机制
实行器会定期向调度中央发送心跳,以保持与调度中央的连接,并上报本身的康健状态。
心跳作用
:
维持实行器与调度中央的
连接
上报实行器的
康健状态
(如是否在线、负载情况等)
调度中央根据心跳信息判断实行器是否可用
心跳超时处理
:
假如调度中央长时间未收到实行器的心跳,会将该实行器标志为离线,并不再向其分发任务
任务重试与容错
XXL-JOB 提供了任务重试机制,确保
任务在失败时能够主动重试
。
重试机制
:
假如任务实行失败,调度中央会根据配置的重试次数重新触发任务。
实行器会重新实行任务,直到任务乐成或到达最大重试次数。
容错机制
:
假如某个实行器宕机,调度中央会将任务
分发给其他康健的实行器
。
调度中央会根据心跳信息动态调整任务分发策略
任务分片与并行实行
XXL-JOB 支持任务分片(Sharding),允许将一个任务拆分成多个子任务并行实行。
分片原理
:
调度中央将任务分片信息(如分片总数、当前分片索引)通报给实行器
实行器根据分片信息实行对应的子任务
假如你有多个实行器,可以通过分片将任务均匀分配给所有实行器,制止单个实行器负载过高
例如我们给这个定时任务的业务是处理100w条数据
然后我们弄10个分片,耦合到业务逻辑,每一个分片处理10w数据,如许子我们就是10个
@XxlJob("shardingJobHandler")
public ReturnT<String> shardingJobHandler(String param) throws Exception {
// 获取分片参数
int shardIndex = XxlJobHelper.getShardIndex(); // 当前分片索引
int shardTotal = XxlJobHelper.getShardTotal(); // 总分片数
// 模拟处理数据
List<String> dataList = getDataList(); // 获取所有数据
int dataSize = dataList.size();
int perShardSize = dataSize / shardTotal; // 每个分片处理的数据量
// 计算当前分片需要处理的数据范围
int start = shardIndex * perShardSize;
int end = (shardIndex == shardTotal - 1) ? dataSize : start + perShardSize;
// 处理当前分片的数据
for (int i = start; i < end; i++) {
String data = dataList.get(i);
processData(data); // 处理数据
}
return ReturnT.SUCCESS;
}
private List<String> getDataList() {
// 模拟获取数据
List<String> dataList = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
dataList.add("data-" + i);
}
return dataList;
}
private void processData(String data) {
// 模拟处理数据
System.out.println("处理数据:" + data);
}
复制代码
并行实行
:
多个实行器可以同时实行不同的分片任务,从而实现任务的并行处理
面试答复思绪
调度中央统一管理任务
我们实行器有两种方式实现:
一个是继续IJobHandler类来重写我们的execute()方法
一个是通过@xxljob注解来实现(底层还是IJobHandler)
实行器启动时,会向调度中央注册本身,并上报本身支持的任务列表。调度中央通过注册信息知道哪些任务可以由哪些实行器实行
同时我们实行器和调度中央会保持心跳实行器会定期向调度中央发送
心跳
,以保持与调度中央的连接,并上报本身的康健状态,
调度中央根据心跳信息判断实行器是否可用
我们的心跳还有超时处理机制,假如调度中央长时间未收到实行器的心跳,会将该实行器标志为离线,并不再向其分发任务
我们的xxl-job和传统的定时任务不同,他有更强大的功能,同时还有ui界面方便交互和使用
首先将一下分布式定时任务和平常定时任务的不同和优缺点
xxl-job他还有任务重试机制和容错机制
重试机制:任务失败时根据配置的重试次数进行重试
容错机制:假如某个实行器宕机,调度中央会将任务
分发给其他康健的实行器
。调度中央会根据心跳信息动态调整任务分发策略
xxl-job的分片机制(大题目化小)
假如你有多个实行器,可以通过分片将任务均匀分配给所有实行器,制止单个实行器负载过高
例如我们给这个定时任务的业务是处理100w条数据
然后我们弄10个分片,耦合到业务逻辑,每一个分片处理10w数据,如许子我们就是10次实行器实行去处理这个100w数据
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
数据人与超自然意识
论坛元老
这个人很懒什么都没写!
楼主热帖
2023团队天梯模拟赛 L2-3 智能护理中心 ...
4. 事务和锁
Java Long类的bitCount()方法具有什么 ...
渗透测试02
kubernetes使用学习(k8s)
【记录】Python爬虫|爬取空间PC版日志 ...
数据类型前置知识
那些年你用过最好的键盘
OSPF多区域
SQL Server 触发器
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
中间件
快速回复
返回顶部
返回列表