bull将丢失锁的 job 称为停滞 job,认为这些 job 因为某些原因导致执行不成功,且还在active状态
在初始化设置中有两个选项来处理停滞 job
/** 检查停滞作业的频率(使用 0 表示从不检查),默认30s */
stalledInterval?: number | undefined;
/** 重新处理停滞作业的最大次数,超过次数则标记为失败,默认1 */
maxStalledCount?: number | undefined;
moveUnlockedJobsToWait用于定时检测停滞任务,根据设置将它们重新推入wait队列或者标记为失败
startMoveUnlockedJobsToWait 启动了定时任务来执行它
Queue.prototype.startMoveUnlockedJobsToWait = function() {
clearInterval(this.moveUnlockedJobsToWaitInterval);
if (this.settings.stalledInterval > 0 && !this.closing) {
this.moveUnlockedJobsToWaitInterval = setInterval(
this.moveUnlockedJobsToWait,
this.settings.stalledInterval
);
}
};
本文介绍了Bull任务队列如何处理因锁丢失而变为停滞状态的job,包括moveUnlockedJobsToWait选项用于检测并处理停滞任务,通过lua脚本进行job状态检查,并详细阐述了job从active到stalled再到可能失败的流程。同时,文章揭示了stalled队列的生成原理,即在每次执行stalled check后,将active队列的job id批量转移到stalled队列。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



