1.27.4 • Published 10 days ago

@dracul/mongoose-queue v1.27.4

Weekly downloads
24
License
ISC
Repository
-
Last release
10 days ago

Dracul Mongoose Queue

Sistema de colas de javascript soportado sobre mongodb y mongoose.

Funcionalidades

  • 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

Producer

Permite agregar tareas a la cola

Metodo: constructor

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')

Metodo: add

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

Consumer

Permite obtener tareas de la cola

Metodo: constructor

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')

Metodo: get

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')

Metodo: ack

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)

Metodo: error

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")

Worker

Permite crear trabajadores que consuman y procesen tareas de la cola

Metodo: constructor

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)

Metodo: work

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()

Metodo: run

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)

Metodo: stop

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()

Metodo: on

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)

Recomendacion

Se aconseja utilizar scaffold dónde tenés todos los módulos ya integrados y link de scafold

https://github.com/draculjs/scaffold

1.27.4

10 days ago

1.23.1

9 months ago

1.24.0

6 months ago

1.22.2

9 months ago

1.20.11

12 months ago

1.18.1

1 year ago

1.16.3

1 year ago

1.18.0

1 year ago

1.15.0

2 years ago

1.11.4

2 years ago

1.11.3

2 years ago

1.11.2

2 years ago

1.11.1

2 years ago

1.10.4

2 years ago

1.10.3

2 years ago

1.10.0

2 years ago

1.8.0

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.7.22

2 years ago

1.7.23

2 years ago

1.7.24

2 years ago

1.9.2

2 years ago

1.8.6

2 years ago

1.7.12

2 years ago

1.7.10

2 years ago

1.7.11

2 years ago

1.7.0

2 years ago

1.6.3

2 years ago

1.6.2

2 years ago

1.6.0

2 years ago

1.3.4

2 years ago

1.3.3

2 years ago

1.2.13

3 years ago

1.2.10

3 years ago

1.2.11

3 years ago

1.2.15

3 years ago

1.2.8

3 years ago

1.2.9

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.0

3 years ago

1.1.38

3 years ago

1.1.37

3 years ago

1.1.36

3 years ago

1.1.35

3 years ago

1.1.39

3 years ago

1.1.15

3 years ago

1.1.14

3 years ago

1.0.105

3 years ago

1.0.104

3 years ago

1.0.69

3 years ago

1.0.68

3 years ago

1.0.61

3 years ago

1.0.59

3 years ago

1.0.58

3 years ago

1.0.57

3 years ago

1.0.56

3 years ago

1.0.47

3 years ago

1.0.44

4 years ago

1.0.43

4 years ago

1.0.45

4 years ago

1.0.42

4 years ago

1.0.41

4 years ago

1.0.40

4 years ago

1.0.39

4 years ago

1.0.38

4 years ago

1.0.37

4 years ago

1.0.34

4 years ago

1.0.32

4 years ago

1.0.31

4 years ago