我在我的 node.js 应用程序中使用kue处理延迟作业。
我有一些问题要弄清楚如何使用 kue 的 API 重新启动作业,而不必使用 redis 命令将作业的 id 从失败作业列表手动移动到非活动作业列表。
这可以使用 kue 吗?
我不想设置固定的重试次数——我只想重试特定的作业。
也欢迎提出维护良好的 kue 替代方案的建议。
我在我的 node.js 应用程序中使用kue处理延迟作业。
我有一些问题要弄清楚如何使用 kue 的 API 重新启动作业,而不必使用 redis 命令将作业的 id 从失败作业列表手动移动到非活动作业列表。
这可以使用 kue 吗?
我不想设置固定的重试次数——我只想重试特定的作业。
也欢迎提出维护良好的 kue 替代方案的建议。
我不知道这是否有效,但您可以尝试将作业状态重置为活动,然后再次保存作业:
job.on('failed', function() {
job.state('inactive').save();
编辑:将状态设置为非活动将正确地重新排队任务。
这也可以使用队列级事件来完成。
queue.on('job failed', function(id, result) {
kue.Job.get(id, function(err, job) {
if (!err && shouldRetry(job))
job.state('inactive').save();
});
});
因此,您无需为希望重试的每项工作都执行此操作。相反,您可以在队列级别事件中对其进行过滤。
请参阅官方文档中的失败尝试
默认情况下,作业只有一次尝试,即当它们失败时,它们被标记为失败,并保持这种状态,直到您进行干预。但是,Kue 允许您指定这一点,这对于传输电子邮件等工作很重要,如果失败,通常可以重试而不会出现问题。为此,请使用数字调用 .attempts() 方法。
queue.create('email', {
title: 'welcome email for tj'
, to: 'tj@learnboost.com'
, template: 'welcome-email'
}).priority('high').attempts(5).save();
参考:失败尝试