¿Cuál es la mejor manera de procesar continuamente los elementos agregados a la cola? Veo el siguiente método
queue.processhttps://github.com/Automattic/kue#processing-jobs
pero esto se procesará y regresará. Los elementos agregados después de esta llamada obviamente no se procesan.
Pensé en hacer:
queue.on('job enqueue', function(id, type){ queue.process('email', function (job, done) { console.log('processing one: ' + job.id); done(null); }); });¿Pero no está seguro si esto activa múltiples métodos de proceso ignorando el estado actual de la cola?
EDITAR:
Creé un controlador para escuchar el tipo de 'correo electrónico', pero solo se llama una vez dado el escenario a continuación. A menos que me esté perdiendo algo, ¿esperaría que el proceso se ejecutara exactamente 10 veces aquí?
const queue = kue.createQueue(); queue.process('email', function (job, done) { email(job.id, job.data, done); }); var email = function(id, email, done) { console.log('job: %s, sent to: %s number: %s', id, email.to, email.number); done(null, {result: 'OK'}); }; queue .on('job enqueue', function (id, type) { console.log('job %s got queued of type %s with id %s', id, type); }) .on('job complete', function (id, result) { console.log('job complete: ' + id); }); for (var i = 0; i < 10; i++) { queue .create('email', { title: 'welcome email for tj', number: i, to: 'tj@learnboost.com', template: 'welcome-email' }) .removeOnComplete(true) .save(); }Se llamará a la función pasada a queue.process para cada trabajo en cola.
Piense en ello como un controlador de eventos: "escucha" (en este caso) eventos/trabajos de "correo electrónico" , y para cada uno se llamará a la función del controlador. Por lo tanto, es incorrecto que "los elementos agregados después de esta llamada obviamente no se procesen" .
Según el manual fino , "de forma predeterminada, una llamada a queue.process() solo aceptará un trabajo a la vez para su procesamiento" , pero puede aumentar la concurrencia:
queue.process('email', 20, function(job, done){ // ... });Un código de ejemplo que muestra que se llama al controlador para cada nuevo trabajo:
const kue = require('kue'); const queue = kue.createQueue(); queue.process('email', function(job, done){ console.log('got job', job.data); done(); }); setInterval(() => { queue.create('email', { timestamp : new Date() }).save(); }, 1000);