Colas de tareas en JavaScript para principiantes: guía completa

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

Introducción: ¿Para qué sirven las colas de tareas?



Imagina que ejecutas un servidor web en Node.js. Un usuario envía una solicitud para enviar 1000 correos electrónicos. Si procesas esta solicitud de forma síncrona, el servidor se "congelará" durante varios minutos — el resto de usuarios no podrán recibir respuesta.



¿Cómo solucionar este problema? La respuesta son las colas de tareas (task queues). Permiten posponer la ejecución de operaciones que consumen muchos recursos (envío de correos, generación de PDF, procesamiento de imágenes) y ejecutarlas en segundo plano, sin bloquear el flujo principal de la aplicación.



En este artículo analizaremos:

  • Qué es una cola de tareas y cómo funciona
  • Bibliotecas populares para Node.js (Bull, Kue)
  • Ejemplos de código: creación, adición y procesamiento de tareas
  • Mejores prácticas para principiantes


1. Fundamentos de las colas de tareas en Node.js



¿Qué es una cola de tareas?

Una cola de tareas es una estructura de datos que funciona bajo el principio FIFO (First In, First Out — primero en entrar, primero en salir). Las tareas se añaden al final de la cola y se procesan desde el principio. Normalmente, las colas se construyen sobre Redis, un rápido almacén de clave-valor en memoria.



Componentes principales de una cola:

  • Producer — código que añade tareas a la cola
  • Consumer (Worker) — código que toma las tareas y las ejecuta
  • Queue Manager — mecanismo que gestiona la cola (normalmente Redis)


Bibliotecas populares

Para Node.js existen dos bibliotecas principales:

  • Bull — moderna, rápida, con soporte para prioridades, reintentos y retrasos
  • Kue — biblioteca antigua pero simple (actualmente menos popular)

En este artículo nos centraremos en Bull, ya que tiene soporte activo y más funcionalidades.



2. Instalación y configuración de Bull



Paso 1: Instalación de Redis

Bull utiliza Redis. Si no tienes Redis, instálalo:

# macOSbrew install redis

# Ubuntusudo apt-get install redis-server

# Iniciar Redisredis-server


Paso 2: Instalación de Bull

Crea un nuevo proyecto e instala el paquete:

mkdir queue-democd queue-demonpm init -ynpm install bull


Paso 3: Configuración básica

Crea el archivo queue.js:

const Queue = require('bull');

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

module.exports = emailQueue;


3. Ejemplo: cola para enviar correos electrónicos



Paso 1: Crear el Producer (añadir tareas)

Crea el archivo producer.js:

const emailQueue = require('./queue');

async function addEmailTask(to, subject, body) { // Añadimos la tarea a la cola const job = await emailQueue.add({ to: to, subject: subject, body: body }, { // Opciones de la tarea attempts: 3, // Número de intentos en caso de error backoff: 5000, // Retraso entre intentos (5 seg) delay: 1000 // Retraso antes de la ejecución (1 seg) });

console.log(`Tarea añadida con ID: ${job.id}`); return job;}

// Ejemplo de usoaddEmailTask('user@example.com', '¡Hola!', 'Mensaje de prueba');


Paso 2: Crear el Worker (procesamiento de tareas)

Crea el archivo worker.js:

const emailQueue = require('./queue');

// Función que simula el envío de un correo electrónicoasync function sendEmail(to, subject, body) { console.log(`Enviando correo a ${to}...`); // Simulación de retraso await new Promise(resolve => setTimeout(resolve, 2000)); console.log(`Correo enviado: ${subject}`);}

// Manejador de la colaemai

Blogs

Book Recommendations