Noções Básicas de Filas
8 exemplos para você começar com filas e workers para Node.js - 6 básicos e 2 intermediários.
Busque em todas as páginas da documentação
8 exemplos para você começar com filas e workers para Node.js - 6 básicos e 2 intermediários.
npm install bullmq ioredis
npm install -D typescript@5.6 tsxRedis 7 é necessário para BullMQ. Veja BullMQ para configuração de worker em produção.
| Na requisição HTTP | No worker |
|---|---|
| Enviar e-mail | OK |
| Redimensionar 50 imagens | Fila |
| Cobrar cartão + fulfillment | Fila após chave de idempotência |
| Retornar resultados de busca <100ms | Apenas Sincronizar DB |
Relacionado: BullMQ - Filas baseadas em Redis
import { Queue } from "bullmq";
import IORedis from "ioredis";
const connection = new IORedis(process.env.REDIS_URL!, { maxRetriesPerRequest: null });
const emailQueue = new Queue("email", { connection });
app.post("/invite", async (req, res) => {
const job = await emailQueue.add("send-invite", {
to: req.body.email,
orgId: req.body.orgId,
});
res.status(202).json({ jobId: job.id });
});202 Accepted sinaliza processamento assíncronoimport { Worker } from "bullmq";
import IORedis from "ioredis";
const connection = new IORedis(process.env.REDIS_URL!, { maxRetriesPerRequest: null });
new Worker(
"email",
async (job) => {
if (job.name === "send-invite") {
await sendInviteEmail(job.data.to, job.data.orgId);
}
},
{ connection, concurrency: 5 }
);concurrency limita jobs paralelos por pod do workerawait emailQueue.add(
"send-invite",
{ to, orgId },
{
attempts: 5,
backoff: { type: "exponential", delay: 2000 },
removeOnComplete: 1000,
removeOnFail: false,
}
);removeOnFail: false)attempts para que mensagens venenosas parem eventualmenteRelacionado: Retentativas com Backoff
app.get("/jobs/:id", async (req, res) => {
const job = await emailQueue.getJob(req.params.id);
if (!job) return res.status(404).json({ error: "not_found" });
const state = await job.getState();
res.json({ id: job.id, state, progress: job.progress });
});waiting, active, completed, failed, delayedawait paymentsQueue.add("capture", { paymentId, idempotencyKey }, { jobId: idempotencyKey });jobId estável deduz jobs duplicados de retentativas do clienteapi/ -> Apenas HTTP + enfileiramento
worker-email/ -> BullMQ Worker
worker-media/ -> Fila de CPU pesada
Relacionado: Fleet de Workers de Referência
| Gatilho | Ferramenta |
|---|---|
| Ação do usuário | Job de fila agora |
| Toda noite às 2h | Cron + lock de líder opcional |
| A cada 5 minutos | Job repetível do BullMQ |
BullMQ requer Redis. AWS SQS é uma alternativa - veja Consumidores AWS SQS.
Sub-50ms p95. O enfileiramento é uma viagem de ida e volta ao Redis.
Jobs se acumulam na fila. Alerte sobre a profundidade; escale workers ou corrija o consumidor.
Não. Mire em pelo menos uma vez com workers idempotentes.
@nestjs/bullmq envolve os módulos BullMQ. Mesmas regras de retentativa e idempotência.
BullMQ suporta números de prioridade. Use com moderação - deixa de fome baixa prioridade se abusado.
delay: 60000 para envio agendado. Repetível para padrões de cron.
Armazene o blob no S3; enfileire apenas o ID de referência. O payload do job Redis permanece pequeno.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5, e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026