DEV Community

Marcos Belorio
Marcos Belorio

Posted on

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.

Top comments (0)