2

我像往常一样设置了 kue 工作:

var job = jobs.create('phase2', s);
    job.on('complete', function (){
        console.log('Job'+job.id+' is done');
    }).on('failed', function (){
        console.log('Job'+job.id+'has failed');
    });
    job.save();

在某些情况下,我希望作业失败并自动重新启动。为此,我的处理器中有以下几行:

if(t==1){
    //Keep going
}else{
    console.log('PROBLEM');
    job.failed();
}

我尝试将失败的事件更改为:

.on('failed', function (){
    console.log('Job'+job.id+'has failed');
    job.state('inactive').save();
 });

如此处建议:Node.js Kue 如何重新启动失败的作业

我还尝试像在自述文件中一样添加尝试() ,如下所示:

var job = jobs.create('phase2', s).attempts(5);

这些事情都没有奏效。该作业被标记为“失败”,我的控制台显示“问题”,但我没有看到“失败”侦听器中定义的消息。

编辑

经过更多阅读,我尝试在队列级别收听“作业失败”事件,使用:

  jobs.on('job failed', function(id,result){
    console.log('fail queue');
    kue.Job.get(id, function(err, job){
      job.state('inactive').save();
    });
  });

同样的结果,并且没有控制台日志......这似乎是 Kue 以外的东西,知道什么可以使事件不触发吗?

4

1 回答 1

2

对于延迟作业,您需要添加jobs.promote()将延迟作业放回队列的 setInterval()。README上也有。所以你需要类似的东西:

jobs.on('job failed', function(id, result){
  console.log('fail queue');
  kue.Job.get(id, function(err, job){
    job.state('inactive').save();
  });
});

jobs.promote();

至少这对我的问题有效。

于 2014-10-02T17:49:08.270 回答