Filas de tarefas para TypeScript: Bull, Agenda e Bee-Queue

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 TypeScript: Bull, Agenda e Bee-Queue



Em aplicações web modernas em TypeScript, surge frequentemente a necessidade de executar operações que consomem muitos recursos ou são demoradas de forma assíncrona, sem bloquear o fluxo principal. As filas de tarefas (Job Queues) são um padrão arquitetural comprovado que permite adiar a execução de tarefas, distribuir a carga entre workers e garantir a confiabilidade do processamento. Neste artigo, analisaremos três ferramentas populares para TypeScript: Bull, Agenda e Bee-Queue. Você aprenderá como integrá-las em seu projeto, quais são seus pontos fortes e qual ferramenta escolher para cenários específicos.



1. Bull — uma fila poderosa baseada em Redis



Bull é, sem dúvida, a biblioteca mais popular para gerenciar filas de tarefas em Node.js/TypeScript. Ela usa Redis como backend, o que garante alto desempenho e resiliência a falhas. O Bull suporta prioridades de tarefas, novas tentativas, atrasos, bem como cenários complexos com pausa e retomada da fila.



Instalação:

npm install bullnpm install @types/bull  // para TypeScript


Exemplo simples de produtor-consumidor:

import Queue from 'bull';

// Cria uma fila com o nome 'email'const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 6379 }});

// Producer: adiciona uma tarefaasync function sendWelcomeEmail(userId: string) { await emailQueue.add( { userId, type: 'welcome' }, { attempts: 3, backoff: 2000 } // 3 tentativas com atraso de 2s );}

// Consumer: processa a tarefaemailQueue.process(async (job) => { const { userId, type } = job.data; console.log(`Enviando e-mail do tipo ${type} para o usuário ${userId}`); // Lógica de envio de e-mail aqui});


O Bull também fornece monitoramento de UI conveniente através do bull-board ou bull-repl, o que facilita a depuração em produção.



2. Agenda — fila flexível com suporte a agendamentos



Agenda é uma biblioteca que também usa MongoDB como armazenamento. Sua principal característica é o suporte integrado para tarefas periódicas (agendamentos semelhantes a cron) e uma API conveniente para definir trabalhos recorrentes. O Agenda é ideal para tarefas que precisam ser executadas em horários programados: limpeza de banco de dados, geração de relatórios, envio de resumos.



Instalação:

npm install agendanpm install @types/agenda


Exemplo de uso com agendamento:

import Agenda from 'agenda';

const agenda = new Agenda({ db: { address: 'mongodb://localhost:27017/agenda-example' }});

// Define a tarefaagenda.define('send weekly report', async (job) => { const { department } = job.attrs.data; console.log(`Gerando relatório semanal para o departamento ${department}`);});

// Inicia o agente e agenda a tarefa(async () => { await agenda.start(); // Executar toda sexta-feira às 18:00 await agenda.every('0 18 * * 5', 'send weekly report', { department: 'TI' });})();


O Agenda suporta prioridades, novas tentativas e desligamento gracioso (graceful shutdown). No entanto, é menos performático que o Bull devido ao uso de MongoDB em vez de Redis.



3. Bee-Queue — fila leve e rápida



Bee-Queue é uma fila minimalista baseada em Redis, focada em desempenho máximo e tamanho de código reduzido. Ela não suporta funcionalidades complexas como prioridades ou agendamentos, mas é ideal para cenários simples onde a velocidade e o baixo consumo de memória são importantes.



Instalação:

npm install bee-queuenpm install @types/bee-queue


Exemplo de funcionamento:

import Bee from 'bee-queue';

const imageQueue = new Bee('image-processing', { redis: { host: 'localhost', port: 6379 }});

// ProducerimageQueue.createJob({

Recommendations