Filas de Tarefas para JavaScript (Node.js): Bull, Bee-Queue, 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



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 bull


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


Exemplo 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

Recommendations