2016-01-21 4 views
10

Hallo, ich erstelle Jobs mit Kue.Ist es möglich, einen bereits erstellten Job in einem Knoten zu aktualisieren? Js

Jeder Job hat eine Verzögerungszeit, normalerweise sind es 3 Stunden.

Jetzt werde ich jede eingehende Anfrage überprüfen, die einen neuen Job erstellen und die ID erhalten möchte.

Wie Sie aus dem obigen Code sehen können, wenn ich Job erstellen werde ich die Job-ID zum Job hinzufügen.

jetzt möchte ich die eingehende ID mit den Job-IDs der vorhandenen Jobs in der Warteschlange überprüfen und den vorhandenen Job mit den neuen Parametern aktualisieren, wenn eine übereinstimmende ID gefunden wird.

so dass meine Jobwarteschlange jedes Mal eine eindeutige job_id hat :).

ist es möglich? Ich habe viel gesucht, aber keine Hilfe gefunden, ich habe die Ku json API überprüft. Es kann jedoch nur Jobs erstellen und abrufen, vorhandene Datensätze nicht aktualisieren.

Vielen Dank im Voraus.

+0

Haben Sie die Update-Methode versucht? https://github.com/Automatitic/kue/blob/master/lib/queue/job.js#L807 – Hugeen

+0

Verwenden Sie die JSON-API für GET/job/, bevor Sie den Job erstellen. Wenn es existiert (Status 200), aktualisieren Sie den Job. Wenn es nicht existiert (Status 404), erstellen Sie den Job. – Monkpit

Antwort

11

Dies ist nicht in der Dokumentation und Beispielen erwähnt, aber es gibt eine update Methode für eine job.

// you have the job_id 
var job_id_to_update = 1; 
// get delayed jobs 
jobs.delayed(function(err, ids) { 
    ids.forEach(function(id) { 
    kue.Job.get(id, function(err, job) { 
     // check if this is job we want 
     if (job.data.job_id === job_id_to_update) { 
      // change job properties 
      job.data.title = 'set another title'; 
      // save changes 
      job.update(); 
     } 
    }); 
    }); 
}); 

Das vollständige Beispiel here ist:

Sie können Ihre Aufträge von job_id auf diese Weise aktualisieren.

Update: Sie können auch die "native" Job-ID verwenden, die für kue bekannt ist. Sie können die Job-ID erhalten, wenn Sie den Auftrag erstellen:

var myjob = jobs.create('myQueue', ... 
    .save(function(err) { 
     if (err) { 
      console.log('jobs.create.err', err); 
     } 
     var job_id = myjob.id; 
     // you can send job_id back to the client 
}); 

Jetzt können Sie direkt den Auftrag ändern, ohne über die Liste Looping:

kue.Job.get(id, function(err, job) { 
    // change job properties 
    job.data.title = 'set another title'; 
    // save changes 
    job.update(); 
}); 
+0

aktualisiert es 'Verzögerung' Zeitraum? Unten ist mein Code, vor und nach dem Update bleibt die Verzögerung gleich – Sahas