Filas de Tarefas para JavaScript (Node.js): Bull, Bee-Queue e Kue
Em aplicações web modernas 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. Para isso, são utilizadas filas de tarefas (job queues). Elas permitem adiar a execução do trabalho, distribuir a carga entre vários processos e garantir o reprocessamento em caso de erros.
Neste artigo, vamos analisar três bibliotecas populares para trabalhar com filas de tarefas em Node.js: Bull, Bee-Queue e Kue. Todas utilizam Redis como broker de mensagens, o que garante alta performance e confiabilidade.
1. Bull — a biblioteca mais popular e funcional
Bull é uma fila de tarefas moderna, rápida e confiável para Node.js, construída sobre Redis. Ela suporta todas as funcionalidades principais: tarefas atrasadas, novas tentativas, prioridades, pausa/retomada, além de monitoramento através de uma UI integrada.
Instalação
npm install bullExemplo básico
const Queue = require('bull');
// Cria a filaconst emailQueue = new Queue('email', 'redis://127.0.0.1:6379');
// Processador de tarefasemailQueue.process(async (job) => { const { to, subject } = job.data; console.log(`Enviando e-mail para ${to}: ${subject}`); // Simulação de envio await new Promise(resolve => setTimeout(resolve, 1000)); return { success: true };});
// Adicionando tarefaemailQueue.add({ to: 'user@example.com', subject: 'Olá do Bull!'}, { attempts: 3, // tentar novamente 3 vezes em caso de erro delay: 5000, // atrasar por 5 segundos priority: 1 // alta prioridade});Principais funcionalidades do Bull
- Novas tentativas — repetição automática em caso de falhas com atraso configurável.
- Prioridades — tarefas com alta prioridade são processadas primeiro.
- Tarefas atrasadas — é possível definir um atraso antes da execução.
- Pausa e retomada — parada da fila para manutenção.
- Monitoramento — interface web integrada
bull-board. - Eventos — inscrição em eventos (completed, failed, progress).
Exemplo avançado com eventos
const Queue = require('bull');const myQueue = new Queue('myQueue');
myQueue.on('completed', (job, result) => { console.log(`Tarefa ${job.id} concluída:`, result);});
myQueue.on('failed', (job, err) => { console.error(`Tarefa ${job.id} falhou: ${err.message}`);});
myQueue.process(async (job) => { // Progresso await job.progress(50); // Execução return { status: 'ok' };});Bull é recomendado para projetos onde é necessária máxima flexibilidade e ferramentas prontas para monitoramento.
2. Bee-Queue — alternativa leve e rápida
Bee-Queue é uma fila de tarefas minimalista, focada em desempenho. É mais simples que o Bull, mas ainda oferece todas as funcionalidades básicas: tarefas atrasadas, repetições, prioridades e escalabilidade.
Instalação
npm install bee-queueExemplo de uso
const Queue = require('bee-queue');
const imageQueue = new Queue('images', { redis: { host: '127.0.0.1', port: 6379 }});
// ProcessadorimageQueue.process(async (job) => { const { filename } = job.data; console.log(`Processando imagem: ${filename}`); // Simulação de processamento await new Promise(resolve => setTimeout(resolve, 2000)); return { processed: true };});
// Adicionando tarefaimageQueue.createJob({ filename: 'photo.jpg'}) .retries(2) .del Também na biblioteca
Filas de tarefas para Swift: guia completo sobre GCD e Operation Queues
Configuração de aplicações em C++: bibliotecas e ferramentas para configuração flexível
Trabalhando com ZIP/arquivos em Go (Golang) — guia completo
Event Bus e padrão Observer em Go (Golang): implementação pub/sub