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! ;-)