2016-01-21 25 views
10

Witam Tworzę zadania przy użyciu Kue.Czy można zaktualizować już utworzone zadanie w węźle kue js

jobs.create('myQueue', { 'title':'test', 'job_id': id ,'params': params }) 
      .delay(milliseconds) 
      .removeOnComplete(true) 
      .save(function(err) { 
       if (err) { 
        console.log('jobs.create.err', err); 
       } 

     }); 

każde zadanie ma opóźnienie, zwykle wynosi 3 godziny.

Teraz sprawdzę każde przychodzące żądanie, które chce utworzyć nowe zlecenie i uzyskać identyfikator.

Jak widać z powyższego kodu, podczas tworzenia zadania dodaję identyfikator zadania do pracy.

więc teraz chcę sprawdzić id przychodzący z istniejącymi zadaniami job_id w kolejce i zaktualizować istniejące zadanie o nowe parametry, jeśli znaleziono pasujący identyfikator .

więc moja kolejka zadań będzie miała unikalny job_id za każdym razem :).

czy to możliwe? , Dużo szukałem, ale nie znalazłem pomocy, sprawdziłem kue json API. ale może tylko tworzyć i otrzymywać zadania pobierania, nie może aktualizować istniejących rekordów.

Z góry dziękuję.

+0

Czy wypróbowałeś metodę aktualizacji? https://github.com/Automattic/kue/blob/master/lib/queue/job.js#L807 – Hugeen

+0

Przed utworzeniem zadania użyj interfejsu API json do GET/job/. Jeśli istnieje (status 200), zaktualizuj zadanie. Jeśli nie istnieje (stan 404), utwórz zadanie. – Monkpit

Odpowiedz

11

Nie jest to wspomniane w dokumentacji i przykładach, ale istnieje metoda update dla job.

można aktualizować swoje zadania przez job_id ten sposób:

// 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(); 
     } 
    }); 
    }); 
}); 

Pełne przykładem jest here.

Aktualizacja: można także rozważyć użycie "natywnego" ID zadania, znanego z kue. można uzyskać identyfikator zadania podczas tworzenia zadania:

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 
}); 

Teraz można bezpośrednio modyfikować pracę bez pętli na liście:

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

czy aktualizuje okres opóźnienia? poniżej jest mój kod, przed i po aktualizacji, opóźnienie pozostaje takie samo – Sahas