xxl-job-admin调度中心启动过程(四) -JobCompleteHelper

xxl-job实战分享 1,xxl-job如何保证同一时刻,一个分片只被一个节点调度? 2,xxl-job-admin启动成功日志 Connected to the target VM, address: '127.0.0.1:63157', transport: 'socket' . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ ... 阅读详情

JobCompleteHelper

JobCompleteHelper的作用:

  1. 创建 callback线程池,该线程池负责处理任务执行回调。调度中心将调度某个执行器执行任务,执行器执行完任务后,要将结果回报给调度中心。
  2. 任务结果丢失处理:调度记录停留在 “运行中” 状态超过10min,且对应执行器心跳注册失败不在线,则将本次调度主动标记失败;该处理每分钟执行一次;

创建线程池

// for callback
		callbackThreadPool = new ThreadPoolExecutor(
				2,
				20,
				30L,
				TimeUnit.SECONDS,
				new LinkedBlockingQueue<Runnable>(3000),
				new ThreadFactory() {
					@Override
					public Thread newThread(Runnable r) {
						return new Thread(r, "xxl-job, admin JobLosedMonitorHelper-callbackThreadPool-" + r.hashCode());
					}
				},
				new RejectedExecutionHandler() {
					@Override
					public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
						r.run();
						logger.warn(">>>>>>>>>>> xxl-job, callback too fast, match threadpool rejected handler(run now).");
					}
				});

处理执行时间超过10分钟的任务

处理流程:

  1. 查询 xxl_job_log日志表中,调度成功、且正在执行中、且调度时间在10分钟前、且对应执行器实例为null的记录;
  2. 将这些记录的执行状态设置为500,表示执行失败;
SELECT
	t.id
FROM
	xxl_job_log t 
LEFT JOIN xxl_job_registry t2 ON t.executor_address = t2.registry_value
WHERE
	t.trigger_code = 200
	AND t.handle_code = 0
	AND t.trigger_time <=  #{losedTime}
	AND t2.id IS NULL;

losedTime:当前时间-10分钟

// for monitor
		monitorThread = new Thread(new Runnable() {

			@Override
			public void run() {

				// wait for JobTriggerPoolHelper-init
				try {
					TimeUnit.MILLISECONDS.sleep(50);
				} catch (InterruptedException e) {
					if (!toStop) {
						logger.error(e.getMessage(), e);
					}
				}

				// monitor
				while (!toStop) {
					try {
						// 任务结果丢失处理:调度记录停留在 "运行中" 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败;
						Date losedTime = DateUtil.addMinutes(new Date(), -10);
						List<Long> losedJobIds  = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLostJobIds(losedTime);

						if (losedJobIds!=null && losedJobIds.size()>0) {
							for (Long logId: losedJobIds) {

								XxlJobLog jobLog = new XxlJobLog();
								jobLog.setId(logId);

								jobLog.setHandleTime(new Date());
								jobLog.setHandleCode(ReturnT.FAIL_CODE);
								jobLog.setHandleMsg( I18nUtil.getString("joblog_lost_fail") );

								XxlJobCompleter.updateHandleInfoAndFinish(jobLog);
							}

						}
					} catch (Exception e) {
						if (!toStop) {
							logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
						}
					}

                    try {
                        TimeUnit.SECONDS.sleep(60);
                    } catch (Exception e) {
                        if (!toStop) {
                            logger.error(e.getMessage(), e);
                        }
                    }

                }

				logger.info(">>>>>>>>>>> xxl-job, JobLosedMonitorHelper stop");

			}
		});
		monitorThread.setDaemon(true);
		monitorThread.setName("xxl-job, admin JobLosedMonitorHelper");
		monitorThread.start();
启动篇-- 定时任务xxl-job-admin核心线程池初始化与调度引擎预热(1) 本文深入解析xxl-job-admin服务端启动时线程池初始化与调度引擎预热的关键机制。通过双线程池设计、时间轮算法优化及参数调优指南,帮助开发者解决高并发场景下的定时任务冷启动问题,提升系统稳定性与性能。特别针对电商大促等高峰场景提供实战优化方案。 阅读详情

相关推荐

XXL-Job Admin启动后,`XxlJobScheduler.init()`里那7个Helper线程池都是做什么的?

本文深入解析XXL-Job Admin启动时`XxlJobScheduler.init()`中的7个核心Helper线程池,包括任务触发引擎、执行器健康监护、失败任务处理等关键功能。通过实际案例和配置示例,揭示这些线程池如何协同工作,确保定时任务系统的高效稳定运行,特别适合需要优化分布式任务调度的开发者参考。

weixin_30790841的博客 562

原理篇-- 定时任务xxl-job-服务端(admin)项目启动过程--JobTriggerPoolHelper 初始化 (3)

本文对 JobTriggerPoolHelper 的工作进行介绍;// 创建日志对象// fast/slow thread pool 快慢线程池创建 区别是线程池最大线程的数量不一样// 快速线程池 的最大线程数量 xxl.job.triggerpool.fast.max 默认值 20010,60L,@Override});// 慢速线程池 的最大线程数量 xxl.job.triggerpool.slow.max 默认值 10010,60L,@Override});

拽着尾巴的鱼儿的博客 1470

開機自動進入UEFI Interactive Shell無法正常開機怎麼辦?

BIOS/UEFI,啟動後進入UEFI Interactive Shell大多數人都告訴你沒有安裝系統去裝系統吧,但你明明昨天還在運行系統?今天就這樣?有沒有解決辦法?

sheaahhoi1的博客 7739

xxl-job-admin调度中心启动过程(一)

xxl-job-admin启动

weimin821的博客 416

VINS-Mono 代码详细解读——IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h

IMU离散中值预积分 1.1、IMU模型 测量值:加速度计a^、陀螺仪w^, 加上了bias游走和随机白噪声。 真实值:加速度计a、陀螺仪w。 实际情况下,可以获得测量值a^和w^,需要反推真实值。一般忽略随机游走高斯噪声n w=w^-bg; a=qwb(a^-ba)-gw; 1.2、连续时间IMU运动模型,积分 PVQ(两帧之间) 将第k帧和第k+1帧所有的IMU进行积...

try_again_later的博客 9266

QUIC 协议域名封堵:核心原理、关键技术与实现路径(C/C++代码实现)

随着 QUIC 协议在互联网领域的广泛应用,其基于 UDP 的传输特性与加密设计,打破了传统 TCP 协议下的域名封堵逻辑,给网络合规管理与安全防护带来新的技术难题。本文将脱离具体代码实现,聚焦 QUIC 协议域名封堵的核心原理、关键技术环节与实际落地路径,从协议特性本质出发,解析如何在遵循 RFC 9000、RFC 9001 等规范的前提下,实现对 QUIC 流量的精准域名封堵。

chen1415886044的博客 1465

22:48:23.008 logback [xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-1218090631] ERROR c.x.job....

这个异常信息表明在尝试连接到某个地址时超时了。具体来说,22:48:23.008表示发生异常的时间,logback是日志记录框架,[xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-1218090631]表示日志所属的项目、类别和具体实例,ERROR表示这是一条错误信息,c.x.job.core.util.XxlJobRemotingUtil表...

weixin_42576186的博客 2561

Hyper-V集群部署指南

工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。 目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程: 目录 Hyper-V的安装 服务集群的搭建 虚拟机的网络通信 NAT网络的搭建 端口映射 Linux的静态IP 虚拟机的自启动问题 Hyper-V的安装 也不能算说是安装,如果你的win1

Swing 6919

原理篇-- 定时任务xxl-job-服务端(admin)项目启动过程--JobCompleteHelper初始化 (6)

本文对JobCompleteHelper 工作内容进行介绍。本文对JobCompleteHelper 工作内容进行介绍;

拽着尾巴的鱼儿的博客 746

State of GPT (ChatGPT 原理及现状介绍)

要用 RLHF 的一个简单的原因就是 RLHF 模型效果更好,下面的图来源于 InstructGPT 论文,PPO (RLHF 算法) 后的模型生成的答案更被人类喜欢。karpathy 认为 RLHF 有用的原因是判别比生成更容易,让标注员去写一些 SFT 的 QA 数据对是比较难的,如果有一个 SFT 模型生成一些数据让标注员判断哪个更好就简单很多。,GPT4 最强,前三个都是 RLHF 模型,其他模型都是 SFT 模型。伯克利做的模型评测榜单。

kebijuelun的博客 3577

创建 Qt Quick 项目

来看看如何使用 Qt Creator 创建 Qt Quick 项目!

青春不老,奋斗不止! 1万+

XXL-Job Admin启动时,那7个Helper线程到底在忙什么?

本文深入解析XXL-Job Admin启动时的7个核心Helper线程,包括任务触发、状态维护和资源管理三大类。详细介绍了JobTriggerPoolHelper、JobRegistryHelper等线程的工作原理及协作机制,帮助开发者更好地理解和优化分布式定时任务调度系统。

weixin_29214559的博客 344

搞懂 ABAP 里的 Language Settings:登录语言、文本环境语言与 sy-langu 的真实含义

SAP系统中语言设置并非单一字段决定,而是由登录语言(logon language)和文本环境语言(text environment language)共同控制。登录语言在会话期间固定,而文本环境语言可通过SET LOCALE语句修改,影响文本处理、排序、异常显示等行为。开发中需区分两者:使用CL_ABAP_SYST方法获取登录语言,通过sy-langu或GET LOCALE获取当前文本环境语言。语言环境切换应谨慎处理并尽快恢复,避免影响会话中其他程序。在多语言场景下,正确处理语言设置对确保文本相关功能正常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1307

【xxl-job 学习之源码分析】

xxl-job 学习之原理分析 前言 大家在工作过程中,或许都对定时任务有所了解,那么业务需求多一点就会用特定的框架来实现(毕竟:专业的事交给专业的人去做)。因此就有了xxl-job 的出场机会,这里对于xxl-job 是什么,能做什么,如何使用不再赘述,此处只分析原理和实现机制。阅读对象:针对想了解xxl-job 源码和原理且拥有一定开发经验的朋友。文章源码所用版本: 2.3.1-SNAPSHOT 资料下载与说明 xxl-job 源码下载 下载完成后用 IDEA 打开,结构如上所示。详解每一部分内容如

Julie的博客 1204

【100%通过率】华为OD机试真题 C 实现【最多等和不相交连续子序列】【2022.11 Q4 新题】

给定一个数组,我们称其中连续的元素为连续子序列,称这些元素的和为连续子序列的和。数组中可能存在几组连续子序列,组内的连续子序列互不相交且有相同的和。求一组连续子序列,组内子序列的数目最多。输出这个数目。

MISAYAONE的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

XXL-Job Admin启动时,那7个Helper线程池到底是怎么分工的?一次讲清楚

本文深入解析XXL-Job Admin启动时的7个Helper线程池分工机制,包括任务触发、状态维护和后台清理三大类线程池的协作关系与调优策略。重点探讨了JobTriggerPoolHelper的快慢线程池设计、JobRegistryHelper的执行器健康监测以及JobScheduleHelper的时间轮算法实现,为分布式定时任务系统的性能优化提供实践指导。

weixin_30415113的博客 442

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

架构篇-- 定时任务xxl-job-admin核心线程池启动与协作机制剖析

本文深入剖析了分布式任务调度中心xxl-job-admin在项目启动时的核心线程池初始化与协作机制。详细解读了JobScheduleHelper、JobTriggerPoolHelper等关键组件的启动过程,阐述了其通过快慢线程池隔离、时间轮算法等设计实现高并发、高可用调度的原理,并提供了基于实际经验的配置调优建议。

gold的博客 975

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

保姆级教程:XXL-Job Admin服务端启动时,那7个默默工作的Helper线程都在干啥?

本文深入解析XXL-Job Admin服务端启动时的7个关键Helper线程,包括JobTriggerPoolHelper、JobRegistryHelper等,详细阐述它们在分布式任务调度中的协同工作机制。通过双线程池设计、心跳检测、失败处理等核心机制,这些线程共同保障了XXL-Job调度系统的高效运行,为开发者提供性能调优的实用指南。

weixin_28475533的博客 240

XXL-JOB调度原理深度解析:从数据库锁到高可用架构

分布式任务调度是构建高可用、可扩展后端系统的关键技术,其核心在于解决多节点间的资源竞争与状态一致性问题。其基本原理通常通过中心化调度器协调多个执行器,利用数据库锁、时间轮算法和异步通信等机制,确保任务在分布式环境下被精准、可靠地触发与执行。这一技术为微服务架构下的定时任务、批量作业提供了关键支撑,广泛应用于电商、金融等需要高并发任务处理的场景。本文聚焦于业界广泛使用的XXL-JOB,深入剖析其如何通过**数据库悲观锁与乐观锁结合**的机制保障调度一致性,并借助**异步线程池与回调队列**的设计实现高性能与高

weixin_33841722的博客 840

分布式定时任务系列7:XXL-job源码分析之任务触发

分布式定时任务系列7:XXL-job源码分-任务触发。

weigeshikebi的博客 1803

解决工作上使用xxl-job调度的时候出现的问题

使用xxl-job调度出现的问题: msg:xxl-rpc remoting error(Read timed out), for url : http://192.168.48.1:8891/run 连接数据库超时,读取不到数据 发现问题:“最开始因为在docker部署lilishop商城的mysql版本是8.0.25、xuxueli/xxl-job-admin2.3.0版本”,但是xxl-job使用调度失败,出现连接超时问题,但从官网拉取xuxueli/xxl-job-admin 源代码,跑起来也是

小方523的博客 1万+

XXL-JOB研究二 调度中心

111

colspanprince的博客 857

内部系统集成XXl-JOB踩过的那些坑

一、问题1 以内部系统充当执行器,xxl-job admin作为调度中心,执行器无论怎么配置,都没有注册到注册中心中 原因:在xxl官方提供的xxl_job数据库脚本中仅仅初始化了一个名字为xxl-job-executor-sample的分组,但是我在配置执行器的时候将本地的properties配置文件中xxl.job.executor.appname的值修改为rzx-job-execu...

Hello World 1万+

整合xxl-job后,项目启动报 ERROR c.x.job.core.executor.XxlJobExecutor - null

整合xxl-job后,项目启动报 ERROR c.x.job.core.executor.XxlJobExecutor - null错误内容解决方案 错误内容 项目集成xxl-job-core( 版本号:2.2.0 )后,项目启动时打印下面异常信息: 19:54:37.897 logback [main] INFO c.e.demo.ChahuashiServiceApplication - Started ChahuashiServiceApplication in 7.98 seconds (JVM

mry6的博客 9093
上一篇: xxl-job-admin调度中心启动过程(三) -JobFailMonitorHelper
下一篇: xxl-job-admin调度中心启动过程(五) -JobLogReportHelper
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值