Colas de tareas para TypeScript: Bull, Agenda y Bee-Queue

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 TypeScript: Bull, Agenda y Bee-Queue



En las aplicaciones web modernas con TypeScript, a menudo surge la necesidad de ejecutar operaciones que consumen muchos recursos o son de larga duración de forma asíncrona, sin bloquear el hilo principal. Las colas de tareas (Job Queues) son un patrón arquitectónico probado que permite retrasar la ejecución de tareas, distribuir la carga entre los trabajadores y garantizar la fiabilidad del procesamiento. En este artículo, analizaremos tres herramientas populares para TypeScript: Bull, Agenda y Bee-Queue. Aprenderá cómo integrarlas en su proyecto, cuáles son sus puntos fuertes y qué herramienta elegir para escenarios específicos.



1. Bull — una potente cola basada en Redis



Bull es, probablemente, la biblioteca más popular para gestionar colas de tareas en Node.js/TypeScript. Utiliza Redis como backend, lo que garantiza un alto rendimiento y resistencia a fallos. Bull admite prioridades de tareas, reintentos, retrasos, así como escenarios complejos con pausas y reanudación de la cola.



Instalación:

npm install bullnpm install @types/bull  // para TypeScript


Ejemplo de un productor-consumidor simple:

import Queue from 'bull';

// Creamos una cola con el nombre 'email'const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 6379 }});

// Productor: añadimos una tareaasync function sendWelcomeEmail(userId: string) { await emailQueue.add( { userId, type: 'welcome' }, { attempts: 3, backoff: 2000 } // 3 intentos con un retraso de 2s );}

// Consumidor: procesamos la tareaemailQueue.process(async (job) => { const { userId, type } = job.data; console.log(`Enviando correo ${type} al usuario ${userId}`); // Aquí la lógica de envío de correo});


Bull también proporciona una práctica interfaz de monitoreo a través de bull-board o bull-repl, lo que facilita la depuración en producción.



2. Agenda — una cola flexible con soporte de horarios



Agenda es una biblioteca que también utiliza MongoDB como almacenamiento. Su característica principal es el soporte integrado para tareas periódicas (horarios tipo cron) y una API conveniente para definir trabajos recurrentes. Agenda es ideal para tareas que deben ejecutarse según un horario: limpieza de bases de datos, generación de informes, envío de resúmenes.



Instalación:

npm install agendanpm install @types/agenda


Ejemplo de uso con horario:

import Agenda from 'agenda';

const agenda = new Agenda({ db: { address: 'mongodb://localhost:27017/agenda-example' }});

// Definimos una tareaagenda.define('send weekly report', async (job) => { const { department } = job.attrs.data; console.log(`Generando informe semanal para el departamento ${department}`);});

// Iniciamos el agente y programamos la tarea(async () => { await agenda.start(); // Ejecutar cada viernes a las 18:00 await agenda.every('0 18 * * 5', 'send weekly report', { department: 'IT' });})();


Agenda admite prioridades, reintentos y apagado graceful. Sin embargo, es menos eficiente que Bull debido al uso de MongoDB en lugar de Redis.



3. Bee-Queue — una cola ligera y rápida



Bee-Queue es una cola minimalista basada en Redis, orientada a la máxima eficiencia y un tamaño de código reducido. No admite funciones complejas como prioridades u horarios, pero es ideal para escenarios simples donde la velocidad y el bajo consumo de memoria son importantes.



Instalación:

npm install bee-queuenpm install @types/bee-queue


Ejemplo de funcionamiento:

import Bee from 'bee-queue';

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

// ProductorimageQueue.createJob({

Recommendations