Pular para o conteúdo

apps/patterns/dead-letter-queue

009 · Padrões Fundamentais · ≈ 6 min de estudo

Dead-Letter Queue

Fila auxiliar que recebe, via Dead-Letter Exchange do RabbitMQ, a mensagem rejeitada sem requeue ou expirada na fila principal. Evita as duas saídas ruins — retry infinito e descarte silencioso — e deixa a mensagem estacionada para inspeção, alerta e reprocessamento controlado.

passos
6
arquivos
9
teste
1
tecnologias
5
Infraestrutura realTypeScriptBunRedisRabbitMQDocker
Baixar cartão

Cenário

Um banco digital processa PIX, TED e boleto. O PIX-002 falha uma vez e é liquidado no retry; a TED-003 esgota os retries com o clearing fora do ar; o BOL-005 é recusado (boleto já pago); o BOL-004 chega corrompido (poison pill). Os três mortos vão para a DLQ; a inspeção alerta cada um, descarta os boletos e, com o clearing de volta, republica a TED, que é liquidada.

Planta

Fluxo
9/9
Gateway de pagamentospayments.queue (TTL 30 s)Workerpayments.queue.retry.200/ .400payments.dlxpayments.dlqInspeção da DLQpublica com origeme correlation identregafalha transitória:cópia comx-attempt + 1TTL expira e voltapoison pill,recusa ou retriesesgotados: nacksem requeueTTL expiradosem consumoroteialê x-death, alertacausa corrigida:republica com omesmo id
9

9 passos — reproduza para seguir o fluxo

  1. 01

    DLXpayments.queue declara x-dead-letter-exchange e x-message-ttl — rejeitada sem requeue ou expirada, o broker entrega à payments.dlq

  2. 02

    Poison pill e recusaCorpo inválido ou erro de negócio vai direto para a DLQ, sem retry

  3. 03

    Falha transitóriaRetry atrasado por filas de TTL fixo, com x-attempt no header; esgotado o último degrau, DLQ — nunca nack com requeue em loop

  4. 04

    DiagnósticoA mensagem leva serviço de origem, correlation id e horário; o broker carimba motivo e fila de origem no x-death

  5. 05

    InspeçãoToda mensagem da DLQ é lida, alertada e confirmada (ack), mesmo quando descartada

  6. 06

    Reprocessamento controladoCom a causa corrigida, a mensagem volta à fila principal com o mesmo id — a idempotência do worker (Redis) segura duplicata

apps/patterns/dead-letter-queue

9 arquivos

src/

  • topology_payment.tsExchange, fila com DLX e TTL, DLQ e filas de retry
  • publisher_payment.tsPublicação confirmada com mandatory e contexto de diagnóstico
  • worker_payment.tsConsumo: poison pill, retry por TTL, DLQ
  • dlq_payment.tsInspeção (x-death), alerta e replay ou descarte
  • idempotency_payment.tsClaim do id do pagamento no Redis
  • config_payment.tsLê e valida o ambiente no boot
  • dlq_payment.test.tstesteIntegração contra RabbitMQ e Redis reais: poison pill, retries, TTL, replay
  • demo.tsdemoPublica 5 pagamentos, espera a DLQ e drena

./

  • docker-compose.ymlinfraRabbitMQ com management UI e Redis

Executar · com Docker

  1. docker compose up -d# sobe Redis · RabbitMQ
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário

Filas em tempo real: http://localhost:15672 (guest / guest). Testes: bun run test.

Requisitos
BunDocker
Sobe junto
RedisRabbitMQ

Por que se relacionam

Teste rápido

Qual padrão vem antes de Dead Letter Queue?

Próximo projeto · Padrões FundamentaisDecorator Pattern
Esc

↑ ↓ navegarEnter abrir191 resultados