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 bullEjemplo 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-queueEjemplo 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 También en la biblioteca
Autorización y autenticación en C# (.NET) — guía completa
Caché en Swift (iOS/macOS): Redis, NSCache y Core Data
Guía completa de SwiftyJSON para Swift con ejemplos
Trabajo con YAML en Go (Golang): bibliotecas go-yaml y yaml.v3