sickn33/bullmq-especialista
Experto en BullMQ para colas de trabajos respaldadas por Redis, procesamiento en segundo plano y ejecución asíncrona confiable en aplicaciones Node.js/TypeScript.
¿Qué es BullMQ?
BullMQ es una librería robusta para Node.js que gestiona colas de trabajos basadas en Redis. Permite manejar tareas asíncronas como envío de correos, procesamiento de imágenes o ejecución de procesos batch, garantizando alta disponibilidad y tolerancia a fallos.
Características principales
- Colas persistentes: Los trabajos se almacenan en Redis, evitando pérdidas incluso si el servidor se reinicia.
- Procesamiento en segundo plano: Ideal para tareas pesadas que no deben bloquear el hilo principal.
- Programación de trabajos: Permite ejecutar tareas en momentos específicos o de forma recurrente con
QueueScheduler. - Prioridades y concurrencia: Controla qué trabajos se ejecutan primero y cuántos se procesan simultáneamente.
- Manejo de errores: Soporte para reintentos, colas de espera (dead-letter queues) y eventos de fallo.
- Monitoreo: Integración con herramientas como Redis Commander o Bull-Board para visualizar el estado de las colas.
Instalación
npm install bullmq
Uso básico
Crear una cola
import { Queue } from 'bullmq';
const myQueue = new Queue('tareas-pendientes', {
connection: {
host: 'localhost',
port: 6379,
},
});
await myQueue.add('enviar-correo', {
to: '[email protected]',
subject: 'Hola',
});
Procesar trabajos
import { Worker } from 'bullmq';
const worker = new Worker('tareas-pendientes', async job => {
console.log(`Procesando trabajo ${job.id}: ${job.name}`);
// Lógica de negocio aquí
}, {
connection: {
host: 'localhost',
port: 6379,
},
});
worker.on('completed', job => {
console.log(`Trabajo ${job.id} completado`);
});
worker.on('failed', (job, err) => {
console.error(`Trabajo ${job?.id} falló: ${err}`);
});
Configuración avanzada
Conexión segura a Redis
const connection = {
host: process.env.REDIS_HOST,
port: Number(process.env.REDIS_PORT),
password: process.env.REDIS_PASSWORD,
tls: {},
retryStrategy: (times: number) => Math.min(times * 50, 2000),
};
Planificadores y repetición
import { QueueScheduler } from 'bullmq';
const scheduler = new QueueScheduler('tareas-pendientes', { connection });
await myQueue.add('tarea-diaria', data, {
repeat: {
pattern: '0 8 * * *', // Diario a las 8 AM
},
});
Soporte para plataformas
- Node.js (versión 18+)
- TypeScript (tipado completo incluido)
- Redis (versión 6.2+) como backend
- Compatible con frameworks como Express, Fastify, y NestJS
Recursos adicionales
Licencia
Este skill se distribuye como referencia técnica. El uso de BullMQ está sujeto a su licencia MIT.