Tempo limite de visibilidade do Amazon SQS - Amazon Simple Queue Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tempo limite de visibilidade do Amazon SQS

Quando um consumidor recebe e processa uma mensagem de uma fila, ela permanece na fila. O Amazon SQS não exclui a mensagem automaticamente. Como o Amazon SQS é um sistema distribuído, não há garantia de que o consumidor realmente receba a mensagem (por exemplo, por causa de um problema de conectividade ou um problema na aplicação consumidora). Desse modo, o consumidor deve excluir a mensagem da fila após o recebimento e processamento.

Gráfico de linha do tempo mostrando como as solicitações são processadas durante o tempo limite de visibilidade

Logo após uma mensagem ser recebida, ela permanece na fila. Para evitar que outros consumidores processem a mensagem novamente, o Amazon SQS define um tempo limite de visibilidade, um período durante o qual o Amazon SQS impede que todos os consumidores recebam e processem a mensagem. O tempo limite de visibilidade padrão para uma mensagem é de 30 segundos. O mínimo é 0 segundo. O máximo é 12 horas. Para obter informações sobre como configurar o tempo limite de visibilidade para uma fila usando o console, consulte Configurando parâmetros de fila usando o console do Amazon SQS.

nota

Para filas padrão, o tempo limite de visibilidade não é uma garantia contra o recebimento de uma mensagem duas vezes. Para ter mais informações, consulte Entrega do Amazon SQS at-least-once.

As filas FIFO permitem várias tentativas ao produtor ou ao consumidor:

  • Se o produtor detectar uma falha de ação SendMessage, ele poderá tentar enviá-la novamente quantas vezes for necessário, usando o mesmo ID de eliminação de duplicação de mensagens. Supondo que o produtor receba pelo menos uma confirmação antes que o intervalo de eliminação de duplicação expire, as várias tentativas não afetarão a ordenação das mensagens nem introduzirão duplicatas.

  • Se o consumidor detectar uma falha de ação ReceiveMessage, ele poderá tentar enviá-la novamente quantas vezes for necessário, usando o mesmo ID de tentativa de solicitação de recebimento. Supondo que o consumidor receba pelo menos uma confirmação antes do tempo limite de visibilidade expirar, as várias tentativas não afetarão a ordenação das mensagens.

  • Quando você recebe uma mensagem com um ID de grupo de mensagens, nenhuma outra mensagem para o mesmo ID de grupo de mensagens são retornadas, a menos que você exclua a mensagem ou ela se torne visível.

Mensagens em trânsito

Uma mensagem do Amazon SQS tem três estados básicos:

  1. Enviada para uma fila por um produtor.

  2. Recebida da fila por um consumidor.

  3. Excluída da fila.

Uma mensagem é considerada armazenada depois de ser enviada para uma fila por um produtor, mas enquanto ainda não é recebida da fila por um consumidor (isto é, entre os estados 1 e 2). Não há cota para o número de mensagens armazenadas. Uma mensagem é considerada em trânsito depois de ser enviada para uma fila por um produtor, mas enquanto ainda não é excluída da fila (isto é, entre os estados 2 e 3). Há uma cota para o número de mensagens em trânsito.

Importante

As cotas que se aplicam a mensagens em trânsito não estão relacionadas ao número ilimitado de mensagens armazenadas.

Para a maioria das filas padrão (dependendo do tráfego da fila e da lista de pendências), pode haver um máximo de aproximadamente 120 mil mensagens em trânsito (recebidas de uma fila por um consumidor, mas ainda não excluídas da fila). Se você atingir essa cota ao usar a sondagem curta, o Amazon SQS retornará a mensagem de erro OverLimit. Se você usar a sondagem longa, o Amazon SQS não retornará nenhuma mensagem de erro. Para evitar atingir o quota, você deve excluir mensagens da fila depois de serem processadas. Você também pode aumentar o número de filas que usar para processar as mensagens. Para solicitar um aumento, envie um pedido de suporte.

Para filas FIFO, pode haver no máximo de 20.000 mensagens em trânsito (recebidas de uma fila por um consumidor, mas ainda não excluídas da fila). Se você atingir essa cota, o Amazon SQS não retornará nenhuma mensagem de erro.

Importante

Ao trabalhar com filas FIFO, ocorrerá uma falha nas operações DeleteMessage se a solicitação for recebida fora da janela de tempo limite de visibilidade. Se o tempo limite de visibilidade for 0 segundos, a mensagem deverá ser excluída dentro do mesmo milissegundo em que foi enviada ou considerada abandonada. Isso pode fazer com que o Amazon SQS inclua mensagens duplicadas na mesma resposta a uma operação ReceiveMessage se o parâmetro MaxNumberOfMessages for maior que 1. Para obter detalhes adicionais, consulte Como funciona a API FIFO do Amazon SQS.

Definição do tempo limite de visibilidade

O tempo limite de visibilidade começa quando o Amazon SQS retorna uma mensagem. Durante esse período, o consumidor processa e exclui a mensagem. No entanto, se o consumidor falhar antes de excluir a mensagem e seu sistema não chamar a ação DeleteMessage para essa mensagem antes que o tempo limite de visibilidade expire, a mensagem ficará visível para outros consumidores e a mensagem será recebida novamente. Se uma mensagem só deve ser recebida uma vez, o consumidor deverá excluí-la durante o tempo limite de visibilidade.

Toda fila do Amazon SQS tem a configuração padrão de 30 segundos para o tempo limite de visibilidade. Você pode alterar essa configuração para toda a fila. Normalmente, você deve definir o tempo limite de visibilidade como o tempo máximo de que o seu aplicativo precisa para processar e excluir uma mensagem da fila. Ao receber mensagens, você também pode definir um tempo limite de visibilidade especial para as mensagens retornadas sem alterar o tempo limite de fila geral. Para obter mais informações, consulte as melhores práticas na seção Processamento de mensagens em tempo hábil no Amazon SQS.

Se você não souber quanto tempo leva para processar uma mensagem, crie uma pulsação para o processo do consumidor: especifique o tempo limite de visibilidade inicial (por exemplo, 2 minutos) e, desde que o consumidor ainda funcione na mensagem, continue estendendo o tempo limite de visibilidade em 2 minutos a cada minuto.

Importante

O tempo limite de visibilidade máximo é de 12 horas a partir do momento em que o Amazon SQS recebe ReceiveMessage. Estender o tempo limite de visibilidade não redefine o período máximo de 12 horas.

Além disso, talvez você não consiga definir o tempo limite em uma mensagem individual para as 12 horas completas (por exemplo, 43.200 segundos), pois a solicitação de ReceiveMessage inicia o temporizador. Por exemplo, se você receber uma mensagem e definir imediatamente o máximo de 12 horas enviando uma chamada de ChangeMessageVisibility com VisibilityTimeout igual a 43.200 segundos, provavelmente ocorrerá uma falha. No entanto, usar um valor de 43.195 segundos funcionará, a menos que haja um atraso significativo entre a solicitação da mensagem via ReceiveMessage e a atualização do tempo limite de visibilidade. Se o consumidor precisar de mais de 12 horas, considere usar o Step Functions.

Alteração do tempo limite de visibilidade de uma mensagem

Quando você recebe uma mensagem de uma fila e começa a processá-la, o tempo limite de visibilidade para a fila pode ser insuficiente (por exemplo, você pode precisar processar e excluir uma mensagem). Você pode reduzir ou estender a visibilidade da mensagem especificando um novo valor de tempo limite usando a ação ChangeMessageVisibility.

Por exemplo, se o tempo limite padrão de uma fila é 60 segundos, 15 segundos tiverem decorrido desde que você recebeu a mensagem, e você enviar uma chamada ChangeMessageVisibility com VisibilityTimeout definido como 10 segundos, os 10 segundos começam a contar a partir do momento em que você faz a chamada ChangeMessageVisibility. Portanto, qualquer tentativa de alterar o tempo limite de visibilidade ou excluir essa mensagem 10 segundos após inicialmente alterar o tempo limite de visibilidade (um total de 25 segundos) pode resultar em um erro.

nota

O novo tempo limite entra em vigor quando você chama a ação ChangeMessageVisibility. Além disso, o novo tempo limite se aplica apenas ao recebimento específico da mensagem. ChangeMessageVisibility não afeta o tempo limite de recebimentos posteriores da mensagem ou de filas posteriores.

Término do tempo limite de visibilidade de uma mensagem

Quando você recebe uma mensagem de uma fila, pode descobrir que realmente não quer processar e excluir essa mensagem. O Amazon SQS permite que você termine o tempo limite de visibilidade para uma mensagem específica. Isso torna a mensagem imediatamente visível para outros componentes no sistema e disponível para processamento.

Para terminar o tempo limite de visibilidade de uma mensagem depois de chamar ReceiveMessage, chame ChangeMessageVisibility com VisibilityTimeout definido como 0 segundos.