DEV Community

Marcos Belorio
Marcos Belorio

Posted on

2

Idempotência em filas do serviço AWS SQS

Problema

Quando trabalhamos com aplicações que consomem mensagens de uma fila, um cenário que pode ocorrer é a fila possuir mensagens duplicadas em um fluxo funcional onde isso não poderia acontecer, causando uma inconsistência de dados em nossa aplicação. Esse problema pode ocorrer geralmente por dois motivos:

  • Houve um problema de rede que impediu que o publicador da mensagem recebesse o status da requisição feita ao SQS, fazendo com que seja requisitado novamente.
  • Por falta de validações prévias ou algum bug, funcionalmente o publicador acabou enviando a mesma mensagem para a fila.

Solução

Existem algumas formas de se resolver esse problema, uma delas é utilizando filas do tipo FIFO no serviço AWS SQS. As filas FIFO possuem uma propriedade chamada MessageDeduplicationId. Se uma mensagem for enviada com um MessageDeduplicationId específico, todas as mensagens enviadas com o mesmo MessageDeduplicationId serão aceitas pela fila, porém NÃO serão entregues durante o intervalo de 5 minutos.

Formas de trabalhar com a propriedade MessageDeduplicationId

Existem duas formas de se trabalhar com essa propriedade:

  • A primeira é deixando a cargo do próprio SQS gerar o identificador ativando o "Content-based deduplication" nas configurações do SQS. Ao ativar essa configuração, é gerado um identificador único baseado no conteúdo do corpo da mensagem (não se aplica aos atributos da mensagem).
  • A segunda forma de se trabalhar com o MessageDeduplicationId é passando manualmente um valor ao publicar uma mensagem na fila.

Cenários recomendados para trabalhar manualmente com o MessageDeduplicationId

  • O publicador adiciona alguma informação no corpo da mensagem que sempre faz com que o conteúdo seja diferente.
  • Mensagens com informações nos atributos que também deveriam ser levados em consideração para determinar se a mensagem é duplicada.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up