trilha

Tecnologias/03 - Filas/03 - Amazon SQS2 min

Retry, DLQ e Lambda com SQS

Retry

Retry é uma nova tentativa de processamento. No SQS, deixar uma mensagem sem exclusão permite que ela reapareça após o visibility timeout. Isso não garante que a próxima tentativa terá sucesso: um conteúdo inválido pode falhar indefinidamente.

Uma falha transitória, como indisponibilidade de um serviço, pode desaparecer. Uma mensagem sem um campo obrigatório geralmente continuará inválida. Registrar a causa e evitar repetição imediata sem limite facilita recuperar o fluxo.

Dead-letter queue

Uma DLQ é outra fila destinada a mensagens que excedem o limite configurado de recebimentos. A política de redrive usa maxReceiveCount para definir esse limite. Ele conta recebimentos, não apenas exceções registradas pelo código.

Mover uma mensagem para a DLQ isola a falha; não corrige seu conteúdo. Redrive é movê-la de volta para processamento depois de tratar a causa. A DLQ também tem retenção, e seu prazo deve considerar a investigação e recuperação.

Em FIFO, retirar uma mensagem problemática para DLQ pode permitir que mensagens posteriores avancem e romper a sequência lógica exigida pelo negócio. Referência: DLQ.

Integração com Lambda

Uma associação de origem de eventos do Lambda consulta a fila e invoca a função com lotes. Quando o processamento é bem-sucedido, a integração exclui as mensagens. Se a invocação falha, por padrão o lote pode voltar à fila após o timeout.

Com resposta parcial de lote habilitada (ReportBatchItemFailures), a função pode informar quais itens falharam para evitar repetir os itens bem-sucedidos.

{
  "batchItemFailures": [
    {"itemIdentifier": "id-da-mensagem-que-falhou"}
  ]
}

Esse JSON é o formato de resposta do handler; o identificador deve ser o messageId real do item. Habilitar o recurso na associação é necessário. Em FIFO, o tratamento de falhas também precisa preservar a ordem, reportando os itens não processados conforme as orientações da integração.

A integração pode entregar eventos mais de uma vez. Portanto, o handler continua precisando de idempotência. Referência: Lambda com SQS.

Aprofundamento aplicado

Uma exceção no nível errado repete trabalho desnecessário

Em um lote de dez mensagens, nove podem ter concluído e uma falhar. Com resposta parcial configurada, retorne a falha daquele item. Se o handler lança uma exceção sem produzir a resposta parcial, o lote inteiro pode ser tratado como falha.

Para FIFO, a orientação é parar após a primeira falha e informar também as mensagens não processadas, preservando a ordem. Isso exige cuidado com um Promise.all indiscriminado. Referência: erros e respostas parciais.

Redrive tem capacidade e semântica

Reenviar milhares de mensagens de DLQ após corrigir o código pode sobrecarregar o mesmo banco que atende tráfego normal. Controle ritmo e acompanhe erros novos. Uma mensagem antiga também pode conter schema que a versão atual deixou de entender.

Exercício: simule lote com falha no terceiro item e descreva respostas para Standard e FIFO. Resultado esperado: Standard pode preservar sucessos independentes; FIFO precisa respeitar a sequência e reportar itens que não foram processados.

Relacionado: 3. Visibility Timeout e Exclusão no SQS · Lambda · Back Pressure.


Parte de Amazon SQS

Buscar

Busca por título, seção e texto das notas