2013-01-11 13 views
12

Używam kue dla opóźnionych zadań w mojej aplikacji node.js.Node.js Kue, jak ponownie uruchomić nieudane zadania

Mam pewne problemy, aby dowiedzieć się, jak mogę ponownie uruchomić zadanie za pomocą interfejsu API kue bez konieczności ręcznego przenoszenia identyfikatora zadania z listy nieudanych zadań do listy nieaktywnych zadań za pomocą poleceń redis.

Czy to możliwe przy użyciu kue?

Nie chcę ustawiać ustalonej liczby prób ponowienia - chcę tylko spróbować ponownie określonych zadań.

Sugestie dotyczące dobrze utrzymanej alternatywy dla kue są również mile widziane.

Odpowiedz

11

nie wiem, czy to działa, ale można próbować przywrócić stan pracy na aktywny i zapisać zadanie ponownie:

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

Edit: ustawienie stanu na nieaktywny poprawnie ponownie skolejkowania zadanie.

+1

dzięki! musisz ustawić go na "nieaktywny" zamiast "aktywny", w przeciwnym razie nie będzie on już przetwarzany. Gdyby spojrzeć na kod i myśl, że zmiana stanu w ten sposób nie spowoduje ponownego przypisania zadania do podanej listy. – Matthias

3

Można to również zrobić za pomocą zdarzeń na poziomie kolejki.

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

Dzięki temu nie trzeba wykonywać każdej pracy, którą chcesz powtórzyć. Zamiast tego możesz filtrować je w zdarzeniu na poziomie kolejki.

0

zobaczyć Próby awarii w oficjalnych docs

Domyślnie pracy mają tylko jedną próbę, czyli kiedy nie, oni są oznaczone jako niepowodzenie, i pozostanie w ten sposób, dopóki nie interweniować. Jednak Kue pozwala ci to określić, co jest ważne dla zadań , takich jak przesyłanie wiadomości e-mail, które po niepowodzeniu mogą zazwyczaj ponawiać próbę bez ponownej próby . W tym celu wywołaj metodę .attempts() z liczbą.

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

referencyjny: failure attempts

Powiązane problemy