2016-01-21 25 views
10

Ciao sto creando lavori usando Kue.È possibile aggiornare un lavoro già creato nel nodo 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); 
       } 

     }); 

ogni lavoro ha un ritardo, normalmente è di 3 ore.

Ora controllerò tutte le richieste in arrivo che desiderano creare un nuovo lavoro e ottenere l'id.

Come si può vedere dal codice precedente, quando sto creando un lavoro aggiungerò l'id del lavoro al lavoro.

così ora voglio controllare l'id in entrata con i posti di lavoro esistenti job_id s nella coda e aggiornamento che lavoro con i nuovi params esistente se un id corrispondente trovato.

così la mia coda di lavoro avrà sempre job_id univoco :).

è possibile? , Ho cercato molto ma nessun aiuto trovato, ho controllato il kue json API. ma può solo creare e recuperare i lavori, non aggiornare i record esistenti.

Grazie in anticipo.

+0

Hai provato il metodo di aggiornamento? https://github.com/Automattic/kue/blob/master/lib/queue/job.js#L807 – Hugeen

+0

Utilizzare l'API JSON per GET/job/ prima di creare il lavoro. Se esiste (stato 200), aggiornare il lavoro. Se non esiste (stato 404), crea il lavoro. – Monkpit

risposta

11

Questo non è menzionato nella documentazione e negli esempi, ma esiste un metodo update per un job.

È possibile aggiornare i lavori da job_id questo modo:

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

L'esempio completo è here.

Aggiornamento: è anche possibile prendere in considerazione l'utilizzo dell'ID lavoro "nativo", noto per kue. È possibile ottenere l'ID del processo quando si crea il lavoro:

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

Ora è possibile modificare direttamente il lavoro senza loop oltre l'elenco:

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

aggiorna il periodo di "ritardo"? sotto è il mio codice, prima e dopo l'aggiornamento, il ritardo rimane lo stesso – Sahas