O que bullmq-specialist faz?
Especialista em BullMQ para filas de tarefas com Redis, processamento em segundo plano e execução assíncrona confiável em aplicações Node.js/TypeScript.
Visão Geral
BullMQ é uma biblioteca Node.js de código aberto que gerencia filas de tarefas baseadas em Redis. Ela permite que você:
- Enfileire trabalhos para processamento assíncrono
- Processe trabalhos com múltiplos workers
- Agende trabalhos para execução futura
- Configure retentativas e tratamento de falhas
- Crie fluxos complexos de trabalhos
Configuração
Instalação
npm install bullmq
Conexão com Redis
import { Queue, Worker, QueueScheduler } from 'bullmq';
const connection = {
host: 'localhost',
port: 6379,
// Opcional: senha, TLS, etc.
};
const myQueue = new Queue('my-queue', { connection });
Uso Básico
Adicionar Trabalhos
import { Queue } from 'bullmq';
const emailQueue = new Queue('email', { connection });
// Adicionar um trabalho simples
await emailQueue.add('send-email', {
to: '[email protected]',
subject: 'Bem-vindo!',
body: 'Conteúdo do e-mail'
});
// Adicionar com opções
await emailQueue.add('send-email', data, {
delay: 5000, // Atraso em ms
attempts: 3, // Número de tentativas
removeOnComplete: true,
});
Processar Trabalhos
import { Worker } from 'bullmq';
const worker = new Worker('email', async (job) => {
console.log(`Processando trabalho ${job.id}`);
const { to, subject, body } = job.data;
await sendEmail(to, subject, body);
return { status: 'enviado' };
}, { connection });
Recursos Avançados
Agendamento
// Trabalho recorrente com cron
await emailQueue.add('newsletter', data, {
repeat: {
pattern: '0 8 * * 1' // Toda segunda às 8h
}
});
Fluxos (Flows)
import { FlowProducer } from 'bullmq';
const flow = new FlowProducer({ connection });
const chain = await flow.add({
name: 'criar-pedido',
data: { pedidoId: 123 },
children: [
{
name: 'cobrar-pagamento',
data: { valor: 100 },
children: [
{
name: 'enviar-recibo',
data: { email: '[email protected]' }
}
]
}
]
});
Observabilidade
// Métricas da fila
const jobCounts = await myQueue.getJobCounts();
console.log(jobCounts); // { waiting: 5, active: 2, completed: 10, failed: 1, delayed: 3 }
// Eventos do worker
worker.on('completed', (job) => {
console.log(`Trabalho ${job.id} concluído`);
});
worker.on('failed', (job, err) => {
console.error(`Trabalho ${job.id} falhou: ${err.message}`);
});
Melhores Práticas
- Sempre defina nomes de fila descritivos
- Use retentativas para erros transitórios
- Implemente tratamento de erros em workers
- Monitore filas com
getJobCounts() - Utilize fluxos para dependências complexas