Início › Glossário › Poison message (mensagem envenenada)
Glossário

O que é Poison message (mensagem envenenada)?

Poison message (mensagem envenenada) é um evento que sempre falha no consumidor e entra em loop de retry, travando a fila ou aumentando custo e ruído de incidentes. Normalmente é causado por payload inválido, dados inesperados, dependência indisponível ou bug determinístico. A correção passa por triagem, DLQ, validação, idempotência e limites de tentativas.

Como uma poison message nasce (na prática)

Em automação, a fila é o “amortecedor” entre o evento (pedido, pagamento, lead) e o processamento (emitir nota, atualizar CRM, mandar WhatsApp, etc.). A poison message aparece quando um item da fila tem algo que faz o processamento falhar toda vez: não é uma falha temporária, é um erro repetível.

O padrão clássico: consumidor tenta processar → erro → retry automático → erro de novo → retry… e, dependendo da configuração, isso ocupa worker, aumenta latência, estoura rate limit de APIs e vira incidente.

Por que retry sozinho piora o problema

Retry é ótimo para falhas transitórias (timeout, 502, oscilação). Mas para poison message ele vira amplificador: o mesmo item falha indefinidamente, consumindo recursos e podendo bloquear itens bons atrás dele (dependendo do sistema de fila/ordenação).

Se o seu fluxo também faz chamadas externas, o retry pode gerar efeitos colaterais: tentativa repetida de criar o mesmo registro, duplicar mensagem, ou bater em limites de API.

SinalO que costuma significarO que checar primeiro
Sempre falha no mesmo passoErro determinísticoLogs e payload do item problemático
Erro 400/422 recorrenteContrato/payload inválidoSchema/validação antes de enfileirar
Erro 401/403 recorrenteCredencial/permissãoTokens, escopos, expiração e rotação
Erro 404 recorrenteReferência inexistenteLookup/consistência de IDs (cliente/pedido)
Explosão de retries + lentidão geralFila sendo ocupada por itens ruinsLimite de tentativas, backoff e mecanismo de quarentena

Como tratar: o kit mínimo que evita loop e dá controle

A meta não é “nunca falhar”. É falhar de um jeito administrável: separar o que é transitório do que é estrutural, e dar um destino para o item ruim sem contaminar o resto do sistema.

O que fazer com a poison message depois que ela caiu na DLQ

DLQ não é “lixeira”: é uma área de triagem. O fluxo saudável é: detectar → isolar → corrigir causa → reprocessar com segurança.

Reprocessamento bom é seletivo: você reexecuta só o item corrigido (ou uma faixa) e com idempotência, para não criar duplicidade.

Perguntas frequentes

Poison message é a mesma coisa que erro temporário?
Não. Erro temporário tende a se resolver (ex.: timeout, 502). Poison message é um item específico que continua falhando do mesmo jeito, mesmo com retry, porque o problema está no dado, no contrato ou numa regra determinística.
DLQ é obrigatória para qualquer automação?
Não é “obrigatória”, mas vira essencial quando há fila, volume ou impacto financeiro/operacional. Sem DLQ, o item ruim fica reaparecendo e você perde rastreabilidade do que falhou e do porquê.
Como diferenciar erro 429 (rate limit) de poison message?
429 costuma indicar limitação temporária (candidato a retry com backoff). Vira “poison-like” quando seu fluxo insiste sem controle, sempre no mesmo endpoint, por falta de limitação de concorrência, janela de espera ou ajuste de throughput.
Idempotência resolve poison message?
Idempotência não impede o erro, mas evita que o reprocessamento cause duplicidade (cobrança, pedido, mensagem). Ela é parte do tratamento: você pode reprocessar com segurança após corrigir a causa raiz.

Termos relacionados

← Ver glossário completo