Filas de Tarefas em JavaScript para Iniciantes: Guia Completo

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

Introdução: Por que precisamos de filas de tarefas?



Imagine que você está executando um servidor web em Node.js. Um usuário envia uma solicitação para enviar 1000 e-mails. Se você processar essa solicitação de forma síncrona, o servidor "congelará" por vários minutos — todos os outros usuários não conseguirão obter uma resposta.



Como resolver esse problema? A resposta — filas de tarefas (task queues). Elas permitem adiar a execução de operações que consomem muitos recursos (envio de e-mails, geração de PDF, processamento de imagens) e executá-las em segundo plano, sem bloquear o fluxo principal da aplicação.



Neste artigo, abordaremos:

  • O que é uma fila de tarefas e como ela funciona
  • Bibliotecas populares para Node.js (Bull, Kue)
  • Exemplos de código: criação, adição e processamento de tarefas
  • Melhores práticas para iniciantes


1. Fundamentos de filas de tarefas em Node.js



O que é uma fila de tarefas?

Uma fila de tarefas é uma estrutura de dados que opera com base no princípio FIFO (First In, First Out — o primeiro a entrar é o primeiro a sair). As tarefas são adicionadas ao final da fila e processadas a partir do início. Normalmente, as filas são construídas sobre o Redis — um armazenamento rápido de chave-valor em memória.



Componentes principais de uma fila:

  • Producer — código que adiciona tarefas à fila
  • Consumer (Worker) — código que retira tarefas e as executa
  • Queue Manager — mecanismo que gerencia a fila (geralmente Redis)


Bibliotecas populares

Para Node.js, existem duas bibliotecas principais:

  • Bull — moderna, rápida, com suporte a prioridades, repetições e atrasos
  • Kue — biblioteca antiga, mas simples (atualmente menos popular)

Neste artigo, focaremos no Bull, pois é ativamente mantido e possui mais recursos.



2. Instalação e configuração do Bull



Passo 1: Instalação do Redis

O Bull usa Redis. Se você não tiver o Redis, instale-o:

# macOSbrew install redis

# Ubuntusudo apt-get install redis-server

# Iniciar Redisredis-server


Passo 2: Instalação do Bull

Crie um novo projeto e instale o pacote:

mkdir queue-democd queue-demonpm init -ynpm install bull


Passo 3: Configuração básica

Crie o arquivo queue.js:

const Queue = require('bull');

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

module.exports = emailQueue;


3. Exemplo: fila para envio de e-mail



Passo 1: Criando o Producer (adição de tarefas)

Crie o arquivo producer.js:

const emailQueue = require('./queue');

async function addEmailTask(to, subject, body) { // Adicionando uma tarefa à fila const job = await emailQueue.add({ to: to, subject: subject, body: body }, { // Opções da tarefa attempts: 3, // Número de tentativas em caso de erro backoff: 5000, // Atraso entre tentativas (5 seg) delay: 1000 // Atraso antes da execução (1 seg) });

console.log(`Tarefa adicionada com ID: ${job.id}`); return job;}

// Exemplo de usoaddEmailTask('user@example.com', 'Olá!', 'Mensagem de teste');


Passo 2: Criando o Worker (processamento de tarefas)

Crie o arquivo worker.js:

const emailQueue = require('./queue');

// Função que simula o envio de e-mailasync function sendEmail(to, subject, body) { console.log(`Enviando e-mail para ${to}...`); // Simulação de atraso await new Promise(resolve => setTimeout(resolve, 2000)); console.log(`E-mail enviado: ${subject}`);}

// Manipulador da filaemai

Blogs

Book Recommendations