Estoy sondeando (usando node-cron ) un servicio externo cada N minutos para obtener una matriz de datos, cada elemento de la matriz tiene una identificación única. Sin embargo, ¿cómo puedo configurar mi cola de toros de modo que si agrego un elemento de datos para procesar, no puedo agregar (y, en consecuencia, reprocesar) el mismo elemento a la cola si el elemento de datos ya se está procesando o si ya se procesó/completa? si el elemento de datos no se puede procesar por cualquier motivo, se puede volver a agregar a la cola para intentar procesarlo nuevamente.
La siguiente es una configuración aproximada de mi tarea.
import BullQueue from 'bull'; import cron from 'node-cron'; const myQueue = new BullQueue('my-queue'); myQueue.process((job, done) => { // while job is processing do not allow a new job with same uniqueLogId to be added console.log('job.id:'); // job id auto-generated by bull console.log(job.id); console.log('uniqueLogId:'); console.log(job.data.id); const result = myProcessor(job.data); if (result.ok) { // in this case a new job with uniqueLogId should not be allowed to be created done(); } else { // in this case a new job with uniqueLogId should be allowed to be created done(new Error('job failed')); } }); // run every 10 minutes cron.schedule('*/10 * * * *', () => { pollExternalAPI() // can return the same log results .then((res) => { if (res.ok) { const logs = res.logs; for (const log of logs) { // log.id uniquely identifies a job, // hence jobs with the same id should not be allowed to be created provided the last job is either pending or complete // however if job failed then create another job to attempt processing the given log data myQueue.add(log); } } }); });