Node.js Kue如何重新启动失败的任务

14

我在我的node.js应用程序中使用kue来进行延迟作业。

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

是否可以使用kue实现这一点?

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

如果有保持良好的替代品,欢迎提供建议。

3个回答

12

我不知道这是否有效,但您可以尝试将作业状态重置为活动状态,然后再保存作业:

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();
    });
});

因此,您不需要为每个要重试的作业进行操作。相反,您可以在队列级别事件中对其进行筛选。

2

请在官方文档中查看失败尝试

默认情况下,作业只有一个尝试机会,即当它们失败时,它们被标记为失败,并保持这种状态直到您进行干预。但是,Kue允许您指定此操作,这对于像传输电子邮件这样的工作非常重要,因为在失败时,可能通常可以重新尝试而不会出现问题。要执行此操作,请使用数字调用.attempts()方法。

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

参考资料:失败尝试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接