Filas de tarefas em TypeScript: visão geral de bibliotecas e implementação

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: visão geral de bibliotecas e implementação prática



Em aplicações web modernas em TypeScript, frequentemente surge a necessidade de executar operações que consomem muitos recursos de forma assíncrona, sem bloquear o fluxo principal. Para isso, são utilizadas filas de tarefas (job queues). Elas permitem adiar a execução, distribuir a carga e garantir o processamento confiável de processos em segundo plano. Neste artigo, veremos as melhores bibliotecas para trabalhar com filas em TypeScript, suas características e exemplos de uso.



Para que servem as filas de tarefas?

Imagine que sua aplicação precise enviar 1000 e-mails, processar imagens ou realizar cálculos complexos. Se isso for feito de forma síncrona, o usuário esperará minutos por uma resposta. A fila resolve esse problema: você coloca a tarefa em uma lista, e um worker a processa em segundo plano. Principais vantagens:

  • Assincronia e processamento não bloqueante
  • Escalabilidade (vários workers podem trabalhar em paralelo)
  • Resiliência a falhas (a tarefa é reiniciada em caso de erro)
  • Agendamento (as tarefas podem ser adiadas para um horário específico)


Principais bibliotecas para TypeScript

A maioria das soluções populares é construída sobre Redis — um banco de dados in-memory rápido, ideal para filas. Vamos considerar três opções principais:



1. Bull (a mais popular)

Bull é uma biblioteca madura e de alto desempenho para Node.js com suporte total a TypeScript. Ela oferece uma API rica e mecanismos integrados de repetição, atrasos e prioridades.

Instalação:

npm install bullnpm install @types/bull

Exemplo de criação de fila e manipulador:

import Queue from 'bull';

// Criamos uma fila para processar envios de e-mailconst emailQueue = new Queue('email', { redis: { host: 'localhost', port: 6379 }});

// Adicionamos uma tarefaasync function sendWelcomeEmail(userId: string) { await emailQueue.add({ userId });}

// Manipulador (worker)emailQueue.process(async (job) => { const { userId } = job.data; // Lógica de envio de e-mail aqui console.log(`Enviando e-mail para o usuário ${userId}`); await sendEmail(userId);});

// Tratamento de erros e novas tentativasemailQueue.on('failed', (job, err) => { console.error(`Tarefa ${job.id} falhou: ${err.message}`);});


2. Bee-Queue (alternativa leve)

Bee-Queue é uma fila minimalista, também baseada em Redis. É mais simples que o Bull, mas mais rápida para cenários simples. É adequada quando não são necessárias configurações complexas.

Instalação:

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

Exemplo:

import Queue from 'bee-queue';

const imageQueue = new Queue('images', { redis: { host: 'localhost', port: 6379 }});

// Adicionando uma tarefaimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }).save();

// ProcessamentoimageQueue.process((job, done) => { const { imagePath } = job.data; // Processamento da imagem resizeImage(imagePath) .then(() => done()) .catch(done);});


3. RSMQ (sem worker separado)

RSMQ (Redis Simple Message Queue) é uma fila puramente em Redis que não requer a execução de um processo worker separado. As tarefas são processadas através de um mecanismo pull. Ideal para arquitetura de microsserviços.

Instalação:

npm install rsmq

Exemplo:

import RedisSMQ from 'rsmq';

const rsmq = new RedisSMQ({ host: 'localhost', port: 6379 });

// Criamos uma filaawait rsmq.createQueueAsync({ qname: 'tasks' });

// Enviamos uma mensagemawait rsmq.sendMessageAsync({ qname: 'tasks', message: '{"type":"process_payment"}' });

// Recebemos e processamos (em loop)const message = await rsmq.receiveMessageAsync({ qname: 'tasks' });if (message.id) { console.log('Processando:',

Recommendations