1
resposta

Dúvida durante a aula de visibility timeout

Durante a aula, foi explicado o fluxo da mensagem na aplicação. Primeiro ela recebe a mensagem, processa e exclui. Minha dúvida é justamente no exclui.

Se a aplicação deleta a mensagem, ela deixa de existir na fila, certo? E a onde que o visibility timeout entraria nesse contexto? O visibility timeout só aplica a mensagens não deletadas, não é?

1 resposta

Oi, Mikael :-)

Exato. O "visibility timeout" é somente o tempo que a mensagem está oculta da fila (mas não fora dela) porque algum consumidor a solicitou e provavelmente ainda a está usando.

Se o consumidor exclui a mensagem, ela deixa de existir.

Com um "visibility timeout" muito baixo, uma mensagem pode voltar a estar visível para outros consumidores antes de ser excluída.

Exemplo:

  • Visibility timeout: 2 segundos
  • 00:00 - Consumidor 1 recebe a mensagem e começa a processá-la (mensagem passa a estar "invisível" na fila (in flight))
  • 00:02 - Mensagem volta a estar visível na fila
  • 00:03 - Consumidor 2 recebe a mensagem e começa a processá-la (mensagem volta a estar "in flight")
  • 00:04 - Consumidor 1 termina o processamento e deleta a mensagem
  • 00:07 - Consumidor 2 termina o processamento e tenta deletar a mensagem, que já não existe
  • Problema: Timeout muito baixo, mensagem volta a estar disponível antes que o consumidor que a solicitou termine de processá-la e pode ser solicitada por outro consumidor, gerando múltiplos processamentos.

Se quiser dar uma olhada, esta é a documentação dessa funcionalidade: https://docs.aws.amazon.com/pt_br/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

Espero ter ajudado. Bons estudos! ;-)