Bull para JavaScript (Node.js): guia completo com exemplos

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

O que é Bull e para que serve?

\n\n

Bull é uma biblioteca poderosa e popular para gerenciamento de filas de tarefas (job queues) no ambiente Node.js. Ela é construída sobre o Redis e oferece uma maneira confiável, escalável e flexível de processar tarefas em segundo plano. Se sua aplicação precisa executar operações que não devem bloquear o fluxo principal (por exemplo, envio de email, processamento de imagens, geração de PDF, sincronização com APIs externas, análise de dados), Bull é a solução ideal.

\n\n

Por que usar Bull?

\n
    \n
  • Processamento assíncrono: Descarrega o servidor principal, movendo tarefas pesadas para um processo em segundo plano.
  • \n
  • Confiabilidade: As tarefas são armazenadas no Redis, portanto não são perdidas ao reiniciar a aplicação ou em caso de falha do worker.
  • \n
  • Tentativas repetidas: Suporte integrado para repetições automáticas em caso de erros.
  • \n
  • Agendamento: Possibilidade de adiar tarefas ou executá-las em horários programados (cron).
  • \n
  • Prioridades: Gerenciamento da ordem de execução das tarefas.
  • \n
  • Monitoramento: Acompanhe facilmente o estado das filas com a interface de usuário integrada (Bull Board).
  • \n
\n\n

Instalação do Bull

\n\n

Para começar, certifique-se de que o Redis esteja instalado e em execução. Bull não funciona sem ele.

\n\n
    \n
  1. Instalação do Redis (exemplo para Ubuntu/Debian):\n
    sudo apt update\nsudo apt install redis-server\nsudo systemctl start redis
    \n
  2. \n
  3. Instalação do Bull via npm:\n
    npm install bull
    \n
  4. \n
  5. Instalação do Bull Board (opcional, para interface web):\n
    npm install @bull-board/express @bull-board/api
    \n
  6. \n
\n\n

Início rápido: primeiro exemplo

\n\n

Vamos criar uma fila simples para enviar emails de boas-vindas.

\n\n

Passo 1: Criando o produtor (producer.js)

\n
const Queue = require('bull');\n\n// Cria uma fila com o nome 'emailQueue'\nconst emailQueue = new Queue('emailQueue', {\n    redis: { host: 'localhost', port: 6379 }\n});\n\n// Função para adicionar uma tarefa à fila\nasync function addEmailJob(to, subject, body) {\n    const job = await emailQueue.add(\n        { to, subject, body }, // Dados da tarefa\n        {\n            attempts: 3, // Número de tentativas em caso de erro\n            backoff: { type: 'fixed', delay: 5000 } // Atraso entre tentativas (5 seg)\n        }\n    );\n    console.log(`Tarefa adicionada com ID: ${job.id}`);\n    return job;\n}\n\n// Exemplo de uso\naddEmailJob('user@example.com', 'Bem-vindo!', 'Obrigado por se registrar.')\n    .then(() => process.exit(0))\n    .catch(err => console.error(err));\n
\n\n

Passo 2: Criando o worker (worker.js)

\n
const Queue = require('bull');\n\n// Conecta-se à mesma fila\nconst emailQueue = new Queue('emailQueue', {\n    redis: { host: 'localhost', port: 6379 }\n});\n\n// Manipulador de tarefas\nemailQueue.process(async (job) => {\n    console.log(`Processando tarefa ${job.id}...`);\n    const { to, subject, body } = job.data;\n\n    // Simulação de envio de email (na prática, use nodemailer)\n    await new Promise(resolve => setTimeout(resolve, 2000));\n    console.log(`Email enviado para ${to}: ${subject}`);\n\n    // Se algo der errado, lance um erro\n    // throw new Error('Erro ao enviar');\n});\n\nconsole.log('Worker iniciado e aguardando tarefas...');\n
\n\n

Passo 3: Executando

\n

Primeiro, inicie o worker: node worker.js. Em seguida, em outro terminal, inicie o produtor: node producer.js. Você verá a tarefa entrar na fila e ser processada.

\n\n

Principais métodos e funções do Bull

\n\n

1. new Queue(name, [options]) — Criando uma fila

\n

O que faz: Cria

Recommendations