09 de março de 2025 • 2 min de leitura
O gerenciamento eficiente de filas é essencial para aplicações que precisam lidar com tarefas assíncronas, como processamento de jobs em background, envio de e-mails e geração de relatórios. O BullMQ é uma biblioteca poderosa baseada em Redis que facilita esse gerenciamento no Node.js. Neste artigo, vamos configurar o BullMQ com Redis usando Docker e apresentar exemplos práticos para sua implementação.
O BullMQ utiliza o Redis como seu backend. Para evitar a instalação direta do Redis no sistema, podemos utilizar o Docker para rodá-lo em um contêiner isolado.
Caso ainda não tenha o Docker instalado, siga as instruções do meu outro post e veja como instalar: Windows + WSL2 + Docker
Execute o seguinte comando para iniciar um contêiner Redis:
docker run -d --name redis-bullmq -p 6379:6379 redis
Esse comando:
Para verificar se o Redis está rodando, use:
docker ps
E para se conectar ao Redis dentro do contêiner:
docker exec -it redis-bullmq redis-cli
Agora, vamos configurar um projeto Node.js e instalar as dependências necessárias.
mkdir bullmq-example && cd bullmq-example
npm init -y
Instalando as dependências
npm install bullmq ioredis dotenv
Aqui instalamos:
Crie um arquivo .env na raiz do projeto para armazenar a configuração do Redis:
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
Crie um arquivo queue.js para configurar a fila:
const { Queue } = require('bullmq');
require('dotenv').config();
const connection = {
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
};
const queue = new Queue('taskQueue', { connection });
async function addJob() {
await queue.add('exampleJob', { message: 'Hello, BullMQ!' });
console.log('Job adicionado à fila!');
}
addJob();
Esse código:
Execute o script para adicionar um job:
node queue.js
Agora, vamos criar um processador que consumirá os jobs da fila. Crie um arquivo worker.js:
const { Worker } = require('bullmq');
require('dotenv').config();
const connection = {
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
};
const worker = new Worker('taskQueue', async job => {
console.log(`Processando job: ${job.id}, Dados:`, job.data);
}, { connection });
worker.on('completed', job => {
console.log(`Job ${job.id} concluído com sucesso!`);
});
worker.on('failed', (job, err) => {
console.log(`Job ${job.id} falhou:`, err);
});
Esse worker:
Para iniciar o worker:
node worker.js
Agora, sempre que um job for adicionado à fila, ele será processado pelo worker automaticamente.
O BullMQ facilita a implementação de filas no Node.js, tornando o processamento de tarefas mais eficiente e escalável. Neste artigo, aprendemos a:
Agora, você pode expandir esse conceito para diversas aplicações, como envio de e-mails, processamento de imagens e muito mais. 🚀