Filas de tarefas em Node.js: Bull, Bee-Queue e Kue

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 bull


Exemplo 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-queue


Exemplo 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 {

Recommendations