Colas de tareas para JavaScript (Node.js): Bull, Bee-Queue, 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



En las aplicaciones web modernas con 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. Para ello se utilizan colas de tareas (job queues). Permiten retrasar la ejecución del trabajo, distribuir la carga entre varios procesos y garantizar el reprocesamiento en caso de errores.



En este artículo, revisaremos tres bibliotecas populares para trabajar con colas de tareas en Node.js: Bull, Bee-Queue y Kue. Todas utilizan Redis como broker de mensajes, lo que garantiza un alto rendimiento y fiabilidad.



1. Bull — la biblioteca más popular y funcional



Bull es una cola de tareas moderna, rápida y fiable para Node.js, construida sobre Redis. Soporta todas las funciones clave: tareas retrasadas, reintentos, prioridades, pausa/reanudación, así como monitoreo a través de una interfaz de usuario integrada.



Instalación

npm install bull


Ejemplo básico

const Queue = require('bull');

// Creamos la colaconst emailQueue = new Queue('email', 'redis://127.0.0.1:6379');

// Manejador de tareasemailQueue.process(async (job) => { const { to, subject } = job.data; console.log(`Enviando correo a ${to}: ${subject}`); // Simulación de envío await new Promise(resolve => setTimeout(resolve, 1000)); return { success: true };});

// Añadir tareaemailQueue.add({ to: 'user@example.com', subject: '¡Hola desde Bull!'}, { attempts: 3, // reintentar 3 veces en caso de error delay: 5000, // retrasar 5 segundos priority: 1 // alta prioridad});


Funcionalidades principales de Bull

  • Reintentos — repetición automática en caso de fallos con retardo configurable.
  • Prioridades — las tareas de alta prioridad se procesan primero.
  • Tareas retrasadas — se puede establecer un retardo antes de la ejecución.
  • Pausa y reanudación — detener la cola para mantenimiento.
  • Monitoreo — interfaz web integrada bull-board.
  • Eventos — suscripción a eventos (completed, failed, progress).


Ejemplo avanzado con eventos

const Queue = require('bull');const myQueue = new Queue('myQueue');

myQueue.on('completed', (job, result) => { console.log(`Tarea ${job.id} completada:`, result);});

myQueue.on('failed', (job, err) => { console.error(`Tarea ${job.id} falló: ${err.message}`);});

myQueue.process(async (job) => { // Progreso await job.progress(50); // Ejecución return { status: 'ok' };});


Bull se recomienda para proyectos donde se requiere máxima flexibilidad y herramientas de monitoreo listas para usar.



2. Bee-Queue — una alternativa ligera y rápida



Bee-Queue es una cola de tareas minimalista, orientada al rendimiento. Es más simple que Bull, pero proporciona todas las funcionalidades básicas: tareas retrasadas, reintentos, prioridades y escalabilidad.



Instalación

npm install bee-queue


Ejemplo de uso

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

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

// ManejadorimageQueue.process(async (job) => { const { filename } = job.data; console.log(`Procesando imagen: ${filename}`); // Simulación de procesamiento await new Promise(resolve => setTimeout(resolve, 2000)); return { processed: true };});

// Añadir tareaimageQueue.createJob({ filename: 'photo.jpg'}) .retries(2) .del

Recommendations