Sistema de colas de javascript soportado sobre mongodb y mongoose.
- Producir y consumir tareas
- Marcar tareas como terminadas
- Poder registrar errores en la ejecución de tareas
- Segmentacion por topicos para manejar diferente tipo de tareas
- Posibilidad de agregar retraso a las tareas para posponer su ejecución
- Obtener estadisticas de la cola. Tareas: Agregadas, Tomadas, Terminadas.
#Classes
- Producer
- Consumer
- Queue
- Worker
- WorkerManager
Permite agregar tareas a la cola
Inicializa una instancia de Producer
Argumentos:
- {string} topic: nombre del topico que identifica el tipo de tarea
Ejemplo:
const {Producer} = require('@dracul/mongoose-queue')
let producer = new Producer('test')
Agregar un trabajo a la cola
Argumentos:
- {Plain Object} payload: información para el procesamiento de la tarea
Retorna: {String} ObjectId del documento en MongoDB
Ejemplo:
const {Producer} = require('@dracul/mongoose-queue')
let producer = new Producer('test')
let jobId = await producer.add( {data: 'somedata'} )
Permite obtener tareas de la cola
Inicializa una instancia de Consumer
Argumentos:
- {string} topic: nombre del topico que identifica el tipo de tarea
Ejemplo:
const {Consumer} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
Obtener un trabajo de la cola
Argumentos:
- {string} workerId: identificador del worker que toma la tarea
Retorna: {Object|null} Objecto con todos los datos del job o null si no hay tareas pendientes en la cola
Ejemplo:
const {Consumer} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
let job = await consumer.get('worker')
Marca un trabajo como terminado
Argumentos:
- {string} jobId: identificador del trabajo
Retorna: {Object} Objecto con todos los datos del job
Ejemplo:
const {Consumer} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
let job = await consumer.get('worker')
//...Procesar trabajo...
job = await consumer.ack(job.id)
Marca un trabajo con error
Argumentos:
- {string} jobId: identificador del trabajo
- {string} errorMessage: mensaje con el error registrado
Retorna: {Object} Objecto con todos los datos del job
Ejemplo:
const {Consumer} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
let job = await consumer.get('worker')
//...Procesar trabajo...
job = await consumer.error(job.id,"FatalError")
Permite crear trabajadores que consuman y procesen tareas de la cola
Inicializa una instancia de Worker
Argumentos:
- {Consumer} consumer: Instancia de un consumidor
- {string} workerId: Identificador del worker
- {function} handler: Funcion para procesar el trabajo
Ejemplo:
const {Consumer,Worker} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
const handler = (payload)=>{console.log(payload)}
let worker = new Worker(consumer,'worker1',handler)
Obtiene una tarea de la cola y la procesa con la funcion handler
Argumentos:
Sin argumentos
Ejemplo:
const {Consumer,Worker} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
const handler = (payload)=>{console.log(payload)}
let worker = new Worker(consumer,'worker1',handler)
worker.work()
Ejecuta el worker como daemon. El worker ejecutara el metodo "work" continuamente con un intervalo de tiempo
Argumentos:
- {number} waitTime: Tiempo de espera en milisengundos (ms) entre ejecución de trabajos
Ejemplo:
const {Consumer,Worker} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
const handler = (payload)=>{console.log(payload)}
let worker = new Worker(consumer,'worker1',handler)
worker.run(10000)
Detiene el daemon del worker
Argumentos:
sin argumentos
Ejemplo:
const {Consumer,Worker} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
const handler = (payload)=>{console.log(payload)}
let worker = new Worker(consumer,'worker1',handler)
worker.run(10000)
//...
worker.stop()
El worker permite suscribirse a un EventEmitter con los siguientes eventos
Eventos:
- workStart: El worker inicia un trabajo
- workGet: El worker obtiene un trabajo de la cola
- workAck: El worker da un trabajo por terminado
- workError: El worker registra un error en un trabajo
Ejemplo:
const {Consumer,Worker} = require('@dracul/mongoose-queue')
let consumer = new Consumer('test')
const handler = (payload)=>{console.log(payload)}
let worker = new Worker(consumer,'worker1',handler)
worker.on('workStart',()=>{
console.log("El worker inicia un trabajo")
})
worker.on('workGet',(job)=>{
console.log("El worker toma un trabajo", job)
})
worker.on('workAck',(job)=>{
console.log("El worker da un trabajo por terminado", job)
})
worker.on('workError',(job, error)=>{
console.log("El worker registra un error en un trabajo", job, error)
})
worker.run(10000)
Se aconseja utilizar scaffold dónde tenés todos los módulos ya integrados y link de scafold