bull 中 job 的 moveToFailed 和 moveToCompleted 虽然非常像,都调用了 moveToFinished 方法
但实际上 moveToFailed 还有其它的复杂处理逻辑
首先会保存错误和调用堆栈
Job.prototype.moveToFailed = async function(err, ignoreLock) {
err = err || { message: 'Unknown reason' };
this.failedReason = err.message;
await this.queue.isReady();
let command;
const multi = this.queue.client.multi();
this._saveAttempt(multi, err);
_saveAttempt 将 attemptsMade++, stacktrace 和 failedReason 保存到 job 数据的 hash 中
Job.prototype._saveAttempt = function(multi, err) {
this.attemptsMade++;
const params = {
attemptsMade: this.attemptsMade
};
if (this.opts.stackTraceLimit) {
this.stacktrace = thi
Bull中,job的moveToFailed方法在moveToCompleted基础上有更复杂的逻辑,如保存错误信息、调用堆栈,并根据尝试次数及退避策略决定是否移到failed队列或延迟队列。当尝试次数超出设定值,job会被移到failed队列;否则,根据退避策略决定延迟时间。延迟时间为-1时移到failed,大于0则移到delayed。
订阅专栏 解锁全文
234

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



