Bull para JavaScript (Node.js): guía completa con ejemplos

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

¿Qué es Bull y para qué sirve?

\n\n

Bull es una potente y popular biblioteca para gestionar colas de tareas (job queues) en el entorno Node.js. Está construida sobre Redis y proporciona una forma confiable, escalable y flexible de procesar tareas en segundo plano. Si tu aplicación necesita ejecutar operaciones que no deben bloquear el hilo principal (por ejemplo, envío de correos electrónicos, procesamiento de imágenes, generación de PDF, sincronización con APIs externas, análisis de datos), Bull es la solución ideal.

\n\n

¿Por qué usar Bull?

\n
    \n
  • Procesamiento asíncrono: Descarga el servidor principal moviendo tareas pesadas a un proceso en segundo plano.
  • \n
  • Confiabilidad: Las tareas se almacenan en Redis, por lo que no se pierden al reiniciar la aplicación o ante una falla del worker.
  • \n
  • Reintentos: Soporte integrado para reintentos automáticos en caso de errores.
  • \n
  • Programación: Posibilidad de retrasar tareas o ejecutarlas según un horario (cron).
  • \n
  • Prioridades: Gestión del orden de ejecución de las tareas.
  • \n
  • Monitoreo: Fácil seguimiento del estado de las colas mediante una interfaz de usuario integrada (Bull Board).
  • \n
\n\n

Instalación de Bull

\n\n

Para empezar, asegúrate de tener Redis instalado y en ejecución. Bull no funciona sin él.

\n\n
    \n
  1. Instalación de Redis (ejemplo para Ubuntu/Debian):\n
    sudo apt update\nsudo apt install redis-server\nsudo systemctl start redis
    \n
  2. \n
  3. Instalación de Bull mediante npm:\n
    npm install bull
    \n
  4. \n
  5. Instalación de Bull Board (opcional, para interfaz web):\n
    npm install @bull-board/express @bull-board/api
    \n
  6. \n
\n\n

Inicio rápido: primer ejemplo

\n\n

Creemos una cola simple para enviar correos electrónicos de bienvenida.

\n\n

Paso 1: Crear el productor (producer.js)

\n
const Queue = require('bull');\n\n// Creamos una cola con el nombre 'emailQueue'\nconst emailQueue = new Queue('emailQueue', {\n    redis: { host: 'localhost', port: 6379 }\n});\n\n// Función para agregar una tarea a la cola\nasync function addEmailJob(to, subject, body) {\n    const job = await emailQueue.add(\n        { to, subject, body }, // Datos de la tarea\n        {\n            attempts: 3, // Número de intentos en caso de error\n            backoff: { type: 'fixed', delay: 5000 } // Retardo entre intentos (5 seg)\n        }\n    );\n    console.log(`Tarea agregada con ID: ${job.id}`);\n    return job;\n}\n\n// Ejemplo de uso\naddEmailJob('user@example.com', '¡Bienvenido!', 'Gracias por registrarte.')\n    .then(() => process.exit(0))\n    .catch(err => console.error(err));\n
\n\n

Paso 2: Crear el worker (worker.js)

\n
const Queue = require('bull');\n\n// Nos conectamos a la misma cola\nconst emailQueue = new Queue('emailQueue', {\n    redis: { host: 'localhost', port: 6379 }\n});\n\n// Manejador de tareas\nemailQueue.process(async (job) => {\n    console.log(`Procesando tarea ${job.id}...`);\n    const { to, subject, body } = job.data;\n\n    // Simulación de envío de correo (en la realidad usa nodemailer)\n    await new Promise(resolve => setTimeout(resolve, 2000));\n    console.log(`Correo enviado a ${to}: ${subject}`);\n\n    // Si algo sale mal, lanza un error\n    // throw new Error('Error de envío');\n});\n\nconsole.log('Worker iniciado y esperando tareas...');\n
\n\n

Paso 3: Ejecutar

\n

Primero inicia el worker: node worker.js. Luego, en otra terminal, inicia el productor: node producer.js. Verás cómo la tarea entra en la cola y se procesa.

\n\n

Métodos y funciones principales de Bull

\n\n

1. new Queue(name, [options]) — Creación de cola

\n

Qué hace: Crea

Recommendations