【问题标题】:Node.js Kue how to restart failed jobsNode.js Kue 如何重启失败的作业
【发布时间】:2012-12-26 04:48:34
【问题描述】:

我在我的 node.js 应用程序中使用 kue 处理延迟作业。

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

这可以使用 kue 吗?

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

也欢迎提出维护良好的 kue 替代方案的建议。

【问题讨论】:

    标签: javascript node.js redis delayed-job kue


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!需要将其设置为“非活动”而不是“活动”,否则它将不再被处理。查看代码并认为以这种方式更改状态不会将作业重新分配给给定列表。
    【解决方案2】:

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

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

    因此,您无需为希望重试的每项工作都执行此操作。相反,您可以在队列级别事件中对其进行过滤。

    【讨论】:

      【解决方案3】:

      请参阅官方文档中的失败尝试

      默认情况下,作业只有一次尝试,即当它们失败时,它们 被标记为失败,并保持这种状态,直到您进行干预。 但是,Kue 允许您指定这一点,这对工作很重要 例如传输电子邮件,如果失败,通常可能会重试 没有问题。为此,请使用数字调用 .attempts() 方法。

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

      参考:failure attempts

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        相关资源
        最近更新 更多