Colas de tareas en Node.js: Bull, Bee-Queue y Kue

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Colas de tareas para JavaScript (Node.js): Bull, Bee-Queue y Kue



Al desarrollar aplicaciones web en Node.js, a menudo surge la necesidad de ejecutar operaciones largas o que consumen muchos recursos de forma asíncrona, sin bloquear el hilo principal de procesamiento de solicitudes. Ejemplos típicos: enviar notificaciones por correo electrónico, procesar imágenes cargadas, generar informes en PDF o sincronizar con APIs externas. Para resolver estas tareas se utilizan colas de tareas (job queues), un mecanismo que permite aplazar la ejecución del trabajo, distribuir la carga y garantizar la tolerancia a fallos.



En este artículo, revisaremos tres bibliotecas populares para la gestión de colas en el ecosistema Node.js: Bull, Bee-Queue y Kue. Cada una tiene sus propias características, ventajas y casos de uso.



¿Por qué son necesarias las colas de tareas?



Las principales razones para implementar colas en un backend de Node.js:

  • Descargar el hilo principal. Las operaciones largas (por ejemplo, enviar 1000 correos) no bloquean la respuesta al usuario.
  • Reintentos. Si una tarea falla, la cola la reintenta automáticamente después de un intervalo definido.
  • Programación. Se puede aplazar la ejecución de una tarea para un momento específico (por ejemplo, dentro de 1 hora).
  • Escalabilidad. Varios workers pueden procesar tareas de una misma cola en paralelo.


1. Bull — cola moderna y de alto rendimiento



Bull es una de las bibliotecas más populares para trabajar con colas en Node.js. Está construida sobre Redis y proporciona una API rica para la gestión de tareas.



Características principales de Bull:

  • Soporte para prioridades de tareas.
  • Reintentos configurables (retries).
  • Ejecución retrasada (delay).
  • Eventos (tarea completada, error, progreso).
  • Interfaz de usuario integrada para monitoreo a través de bull-board.


Instalación:

npm install bull


Ejemplo de creación de cola y manejador:

const Queue = require('bull');

// Creamos una cola para enviar correos electrónicosconst emailQueue = new Queue('email', { redis: { host: '127.0.0.1', port: 6379 }});

// Añadimos una tarea a la colaemailQueue.add({ to: 'user@example.com', subject: '¡Hola!', body: 'Este es un correo de prueba'}, { attempts: 3, // reintentar hasta 3 veces en caso de error delay: 5000 // retrasar 5 segundos});

// Manejador de tareasemailQueue.process(async (job) => { const { to, subject, body } = job.data; // Simulación de envío de correo await sendEmail(to, subject, body); console.log(`Correo enviado a: ${to}`);});


Cuándo elegir Bull: si necesitas una cola confiable con funciones avanzadas (prioridades, reintentos, monitoreo) y estás dispuesto a usar Redis.



2. Bee-Queue — ligera y rápida



Bee-Queue es una cola minimalista, también basada en Redis. Está orientada a la simplicidad y el rendimiento. El código de la biblioteca es compacto y la API es intuitiva.



Características de Bee-Queue:

  • Sin dependencias, excepto Redis.
  • Soporte para eventos (ready, job succeeded, job failed).
  • Posibilidad de configurar un tiempo de espera de procesamiento.
  • Sistema simple de reintentos.


Instalación:

npm install bee-queue


Ejemplo de uso:

const Queue = require('bee-queue');

const imageQueue = new Queue('image-processing', { redis: { host: '127.0.0.1', port: 6379 }});

// Añadimos una tareaimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }) .retries(2) .save();

// ManejadorimageQueue.process(async (job) => { const {

Recommendations