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.

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay