2013-01-11 4 views
12

Ich verwende kue für verzögerte Jobs in meiner node.js-Anwendung.Node.js Kue Wie fehlgeschlagene Jobs neu gestartet werden

Ich habe einige Probleme herauszufinden, wie ich einen Job mit der API von kue neu starten kann, ohne die ID eines Jobs manuell von der Liste der fehlgeschlagenen Jobs in die Liste der inaktiven Jobs mit redis-Befehlen zu verschieben.

Ist dies mit kue möglich?

Ich möchte keine feste Anzahl von Wiederholungsversuchen festlegen - ich möchte nur bestimmte Aufträge wiederholen.

Vorschläge für eine gepflegte Alternative zu Ku sind ebenfalls willkommen.

Antwort

11

ich weiß nicht, ob dies funktioniert, aber man könnte versuchen, den Status des Auftrags auf aktiv zurückgesetzt werden, und den Auftrag erneut speichern:

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

Edit: Zustand Einstellung korrekt auf inaktiv wird wieder enqueue die Aufgabe.

+1

Dank! muss es auf "inaktiv" anstatt auf "aktiv" setzen, sonst wird es nicht mehr verarbeitet. Hatte einen Blick auf den Code und dachte, den Zustand zu ändern würde auf diese Weise nicht den Job der angegebenen Liste zuweisen. – Matthias

3

Dies kann auch mithilfe von Warteschlangenebenenereignissen geschehen.

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

So müssen Sie nicht für jeden Job, den Sie wiederholen möchten, tun. Stattdessen können Sie es im Ereignis auf Warteschlangenebene filtern.

0

siehe Fehlversuche in den offiziellen Dokumente

standardmäßig Aufträge nur einen Versuch haben, das ist, wenn sie versagen, sie werden als Versager markiert und bleiben auf diese Weise, bis Sie eingreifen. Mit Kue können Sie jedoch angeben, was für Jobs wichtig ist, z. B. die Übertragung einer E-Mail, die bei einem Fehler normalerweise ohne Probleme wiederholt. Rufen Sie dazu die Methode .attempts() mit einer Zahl auf.

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

Referenz: failure attempts

Verwandte Themen