Filas de tarefas para JavaScript (Node.js): Bull, Bee-Queue e Kue
Ao desenvolver aplicações web em Node.js, surge frequentemente a necessidade de executar operações longas ou que consomem muitos recursos de forma assíncrona, sem bloquear o fluxo principal de processamento de requisições. Exemplos típicos: envio de notificações por email, processamento de imagens carregadas, geração de relatórios em PDF ou sincronização com APIs externas. Para resolver esses problemas, são usadas filas de tarefas (job queues) — um mecanismo que permite adiar a execução do trabalho, distribuir a carga e garantir tolerância a falhas.
Neste artigo, veremos três bibliotecas populares para gerenciamento de filas no ecossistema Node.js: Bull, Bee-Queue e Kue. Cada uma tem suas próprias características, vantagens e cenários de uso.
Por que usar filas de tarefas?
Principais motivos para implementar filas no backend com Node.js:
- Descarregar o fluxo principal. Operações demoradas (por exemplo, enviar 1000 emails) não bloqueiam a resposta ao usuário.
- Tentativas repetidas. Se uma tarefa falhar, a fila a repetirá automaticamente após um intervalo definido.
- Agendamento. É possível adiar a execução de uma tarefa para um horário específico (por exemplo, daqui a 1 hora).
- Escalabilidade. Vários workers podem processar tarefas de uma mesma fila em paralelo.
1. Bull — fila moderna e de alto desempenho
Bull é uma das bibliotecas mais populares para trabalhar com filas em Node.js. Ela é construída sobre o Redis e oferece uma API rica para gerenciamento de tarefas.
Principais recursos do Bull:
- Suporte a prioridades de tarefas.
- Tentativas repetidas configuráveis (retries).
- Execução adiada (delay).
- Eventos (tarefa concluída, erro, progresso).
- Interface de usuário integrada para monitoramento via
bull-board.
Instalação:
npm install bullExemplo de criação de fila e processador:
const Queue = require('bull');
// Criando uma fila para envio de emailconst emailQueue = new Queue('email', { redis: { host: '127.0.0.1', port: 6379 }});
// Adicionando uma tarefa à filaemailQueue.add({ to: 'user@example.com', subject: 'Olá!', body: 'Este é um email de teste'}, { attempts: 3, // repetir até 3 vezes em caso de erro delay: 5000 // adiar por 5 segundos});
// Processador de tarefasemailQueue.process(async (job) => { const { to, subject, body } = job.data; // Simulação de envio de email await sendEmail(to, subject, body); console.log(`Email enviado para: ${to}`);});Quando escolher Bull: se você precisa de uma fila confiável com recursos avançados (prioridades, tentativas repetidas, monitoramento) e está disposto a usar Redis.
2. Bee-Queue — leve e rápida
Bee-Queue é uma fila minimalista, também baseada em Redis. Ela é focada em simplicidade e desempenho. O código da biblioteca é compacto e a API é intuitiva.
Características do Bee-Queue:
- Sem dependências além do Redis.
- Suporte a eventos (ready, job succeeded, job failed).
- Possibilidade de configurar timeout de processamento.
- Sistema simples de tentativas repetidas.
Instalação:
npm install bee-queueExemplo de uso:
const Queue = require('bee-queue');
const imageQueue = new Queue('image-processing', { redis: { host: '127.0.0.1', port: 6379 }});
// Adicionando uma tarefaimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }) .retries(2) .save();
// ProcessadorimageQueue.process(async (job) => { const { Também na biblioteca
Geração de PDF em C++: bibliotecas, ferramentas e exemplos de código
Criptografia em Go (Golang): criptografia e hash
EasyNetQ para C# (.NET): Guia completo com exemplos práticos
Cache em Node.js: Redis e alternativas para acelerar aplicações
Aprendizado de Máquina em Swift: bibliotecas para iOS/macOS