Colas de tareas en TypeScript: revisión de bibliotecas e implementación

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: revisión de bibliotecas e implementación práctica



En las aplicaciones web modernas con TypeScript, a menudo surge la necesidad de ejecutar operaciones que consumen muchos recursos de forma asíncrona, sin bloquear el hilo principal. Para ello se utilizan las colas de tareas (job queues). Permiten retrasar la ejecución, distribuir la carga y garantizar un procesamiento confiable de procesos en segundo plano. En este artículo, revisaremos las mejores bibliotecas para trabajar con colas en TypeScript, sus características y ejemplos de uso.



¿Para qué sirven las colas de tareas?

Imagina que tu aplicación necesita enviar 1000 correos electrónicos, procesar imágenes o realizar cálculos complejos. Si lo haces de forma síncrona, el usuario esperará la respuesta durante minutos. La cola resuelve este problema: colocas la tarea en una lista y un worker la procesa en segundo plano. Ventajas clave:

  • Asincronía y procesamiento no bloqueante
  • Escalabilidad (varios workers pueden trabajar en paralelo)
  • Tolerancia a fallos (la tarea se reinicia si hay error)
  • Planificación (las tareas se pueden retrasar para un momento específico)


Principales bibliotecas para TypeScript

La mayoría de las soluciones populares están construidas sobre Redis, una base de datos rápida en memoria, ideal para colas. Veamos tres opciones principales:



1. Bull (la más popular)

Bull es una biblioteca madura y de alto rendimiento para Node.js con soporte completo para TypeScript. Proporciona una API rica y mecanismos integrados de reintentos, retrasos y prioridades.

Instalación:

npm install bullnpm install @types/bull

Ejemplo de creación de cola y handler:

import Queue from 'bull';

// Creamos una cola para procesar envíos de correo electrónicoconst emailQueue = new Queue('email', { redis: { host: 'localhost', port: 6379 }});

// Añadimos una tareaasync function sendWelcomeEmail(userId: string) { await emailQueue.add({ userId });}

// Handler (worker)emailQueue.process(async (job) => { const { userId } = job.data; // Aquí va la lógica de envío del correo console.log(`Enviando correo al usuario ${userId}`); await sendEmail(userId);});

// Manejo de errores y reintentosemailQueue.on('failed', (job, err) => { console.error(`La tarea ${job.id} falló: ${err.message}`);});


2. Bee-Queue (alternativa ligera)

Bee-Queue es una cola minimalista, también basada en Redis. Es más simple que Bull, pero más rápida para escenarios sencillos. Es ideal cuando no se necesitan configuraciones complejas.

Instalación:

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

Ejemplo:

import Queue from 'bee-queue';

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

// Añadir tareaimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }).save();

// ProcesamientoimageQueue.process((job, done) => { const { imagePath } = job.data; // Procesamiento de imagen resizeImage(imagePath) .then(() => done()) .catch(done);});


3. RSMQ (sin worker separado)

RSMQ (Redis Simple Message Queue) es una cola basada puramente en Redis que no requiere ejecutar un proceso worker separado. Las tareas se procesan mediante un mecanismo pull. Ideal para arquitecturas de microservicios.

Instalación:

npm install rsmq

Ejemplo:

import RedisSMQ from 'rsmq';

const rsmq = new RedisSMQ({ host: 'localhost', port: 6379 });

// Creamos una colaawait rsmq.createQueueAsync({ qname: 'tasks' });

// Enviamos un mensajeawait rsmq.sendMessageAsync({ qname: 'tasks', message: '{"type":"process_payment"}' });

// Recibimos y procesamos (en un bucle)const message = await rsmq.receiveMessageAsync({ qname: 'tasks' });if (message.id) { console.log('Procesando:',

Recommendations