2013-01-11 43 views
12

我使用kue在我的Node.js应用程序延迟作业。Node.js的苦厄如何重新启动失败的作业

我有一些问题要弄清楚如何使用kue的API重新启动作业,而无需将作业的ID从失败作业列表手动移动到使用redis命令的非活动作业列表。

这可能使用kue吗?

我不想设置固定次数的重试次数 - 我只是想重试特定的作业。

建议保持良好的替代KUE也欢迎。

回答

11

我不知道这是工作,但你可以再次尝试重置工作,以积极的状态,并保存作业:

job.on('failed', function() { 
    job.state('inactive').save(); 

编辑:设置状态设置为非活动将正确地重新入队的任务。

+1

的感谢!需要将其设置为“不活动”而不是“活动”,否则将不再处理。看看代码,并认为通过这种方式改变状态不会将工作重新分配给给定的列表。 – Matthias

3

这也可以使用队列级事件来完成。

queue.on('job failed', function(id, result) { 
    kue.Job.get(id, function(err, job) { 
     if (!err && shouldRetry(job)) 
      job.state('inactive').save(); 
    }); 
}); 

因此,您不需要为您想要重试的每项工作都做。相反,您可以在队列级别事件中对其进行过滤。

0

看到失败尝试在官方文档

默认的工作只有一个尝试,那就是当他们失败了,他们 被标记为失败,并保持下去,直到你干预。 然而,苦厄允许你指定这一点,这是工作 如传输电子邮件,其发生故障时,通常可以重试 没有问题很重要。为此,用数字调用.attempts()方法。

queue.create('email', { 
    title: 'welcome email for tj' 
    , to: '[email protected]' 
    , template: 'welcome-email' 
}).priority('high').attempts(5).save(); 

参考:failure attempts

相关问题