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 SQS visibilidade da Amazon
Quando um consumidor recebe uma mensagem de uma SQS fila da Amazon, a mensagem permanece na fila, mas fica temporariamente invisível para outros consumidores. Essa invisibilidade temporária é controlada pelo tempo limite de visibilidade, um mecanismo que impede que outros consumidores processem a mesma mensagem enquanto ela está sendo trabalhada. SQSA Amazon não exclui automaticamente a mensagem; em vez disso, o consumidor deve excluir explicitamente a mensagem usando a DeleteMessage
ação após ela ter sido processada com sucesso.
Tópicos
Definição do tempo limite de visibilidade
O tempo limite de visibilidade na Amazon SQS começa assim que uma mensagem é devolvida ao consumidor. Durante esse período, espera-se que o consumidor processe e exclua a mensagem. No entanto, se o consumidor não excluir a mensagem antes que o tempo limite de visibilidade expire, a mensagem ficará visível novamente na fila e poderá ser recuperada por outro consumidor.
Cada SQS fila da Amazon tem um tempo limite de visibilidade padrão de 30 segundos, mas você pode ajustar essa configuração com base nas necessidades do seu aplicativo. Normalmente, é melhor definir o tempo limite de visibilidade de acordo com o tempo máximo que seu aplicativo precisa para processar e excluir uma mensagem. Você também pode configurar um tempo limite de visibilidade específico para mensagens individuais sem alterar a configuração geral de tempo limite da fila.
Em mensagens e cotas de voo
Na AmazonSQS, as mensagens de bordo são aquelas que foram recebidas de uma fila por um consumidor, mas ainda não foram excluídas. Para filas padrão, há um limite no número de mensagens em trânsito, que pode ser no máximo de aproximadamente 120.000, dependendo do tráfego da fila e do acúmulo de mensagens.
-
Pesquisa curta — Se esse limite for atingido ao usar a enquete curta, a Amazon SQS retornará um
OverLimit
erro, indicando que nenhuma mensagem adicional pode ser recebida até que algumas mensagens de bordo sejam excluídas. -
Sondagem longa — Se você estiver usando sondagem longa, a Amazon SQS não retornará um erro quando o limite de mensagens em voo for atingido. Em vez disso, ele não retornará nenhuma mensagem nova até que o número de mensagens em voo fique abaixo do limite.
Para gerenciar as mensagens de bordo de forma eficaz e evitar atingir essa cota:
-
Exclusão imediata — Certifique-se de que as mensagens sejam excluídas assim que forem processadas com sucesso para reduzir a contagem em voo.
-
Monitore com CloudWatch — Use CloudWatch a Amazon para monitorar o número de mensagens a bordo e definir alarmes para alertá-lo quando se aproximar do limite.
-
Distribuir carga — considere aumentar o número de filas se você estiver processando um grande volume de mensagens, para distribuir a carga e evitar gargalos.
-
Solicite um aumento de cota — Se necessário, envie uma solicitação de suporte para AWS para aumentar a cota de mensagens em voo para seu aplicativo.
Entendendo o tempo limite de visibilidade em padrões e filas FIFO
O tempo limite de visibilidade na Amazon SQS gerencia o processamento de mensagens tanto no padrão quanto nas FIFO filas para evitar o processamento duplicado e manter a ordem das mensagens.
-
Filas padrão — Nas filas padrão, o tempo limite de visibilidade ajuda a evitar que vários consumidores processem a mesma mensagem simultaneamente. No entanto, devido ao modelo de entrega de pelo menos uma vez da AmazonSQS, não há garantia absoluta de que uma mensagem não será entregue mais de uma vez durante o período de tempo limite de visibilidade.
-
FIFOfilas — Nas filas FIFO (primeiro a entrar, primeiro a sair), o tempo limite de visibilidade garante que as mensagens com o mesmo ID de grupo de mensagens sejam processadas na ordem correta. Se um consumidor não excluir uma mensagem antes que o tempo limite de visibilidade expire, nenhuma mensagem nova com o mesmo ID de grupo será entregue até que a mensagem fique visível novamente ou seja excluída. Para FIFO filas, é especialmente importante gerenciar cuidadosamente o tempo limite de visibilidade para manter a ordem das mensagens e a integridade do processamento.
O que acontece se um consumidor não processar uma mensagem
Se um consumidor não conseguir processar uma mensagem, devido a problemas como erros no aplicativo, falhas ou problemas de conectividade, e não excluir a mensagem antes que o tempo limite de visibilidade expire, a mensagem automaticamente ficará visível na fila novamente. Uma vez visível, a mensagem pode ser recuperada pelo mesmo consumidor ou por um consumidor diferente para outra tentativa de processamento. Esse processo garante que as mensagens não sejam perdidas mesmo se o processamento inicial falhar.
No entanto, é importante observar que, se o tempo limite de visibilidade for definido como muito alto, isso atrasará o reaparecimento de mensagens não processadas, potencialmente retardando as novas tentativas. Definir um tempo limite de visibilidade adequado com base no tempo de processamento esperado é crucial para o tratamento oportuno das mensagens.
Alterando e encerrando o tempo limite de visibilidade
Altere ou encerre o tempo limite de visibilidade na Amazon SQS usando a ChangeMessageVisibility
ação para gerenciar o processamento de mensagens de acordo com suas necessidades.
-
Alteração do tempo limite — Se o tempo limite de visibilidade inicial for insuficiente, você poderá ajustá-lo usando a
ChangeMessageVisibility
ação. Essa ação permite que você reduza ou estenda o tempo limite com base nas suas necessidades de processamento. -
Encerrando o tempo limite — Se você decidir não processar uma mensagem recebida, poderá encerrar o tempo limite de visibilidade definindo o como 0 segundos durante
VisibilityTimeout
a ação.ChangeMessageVisibility
Isso disponibiliza imediatamente a mensagem para que outros consumidores possam processá-la.
Práticas recomendadas
Use as seguintes melhores práticas para gerenciar os tempos limite de visibilidade na AmazonSQS, incluindo definir, ajustar e estender os tempos limite, bem como lidar com mensagens não processadas usando Dead-Letter Queues (). DLQs
-
Definindo e ajustando o tempo limite. Comece definindo o tempo limite de visibilidade de acordo com o tempo máximo que seu aplicativo normalmente precisa para processar e excluir uma mensagem. Se você não tiver certeza sobre o tempo exato de processamento, comece com um tempo limite menor (por exemplo, 2 minutos) e estenda-o conforme necessário. Você pode implementar um mecanismo de pulsação para estender periodicamente o tempo limite de visibilidade, garantindo que a mensagem permaneça invisível até que o processamento seja concluído. Isso minimiza os atrasos no reprocessamento de mensagens não tratadas e evita a visibilidade prematura.
-
Estendendo o tempo limite e gerenciando o limite de 12 horas. Se o tempo de processamento variar ou exceder o tempo limite inicialmente definido, use a
ChangeMessageVisibility
ação para estender o tempo limite de visibilidade enquanto a mensagem está sendo processada. Lembre-se de que o tempo limite de visibilidade tem um limite máximo de 12 horas a partir do momento em que a mensagem é recebida pela primeira vez. Estender o tempo limite não redefine esse limite de 12 horas. Se seu processamento exigir mais tempo do que esse limite, considere usar AWS Step Functions ou dividindo a tarefa em etapas menores.Na prática, definir imediatamente o tempo limite de visibilidade para o limite total de 12 horas pode falhar se houver um atraso entre o recebimento da mensagem e a atualização do tempo limite. Para evitar isso, use um valor um pouco menor, como 43.195 segundos.
-
Tratamento de mensagens não processadas Para gerenciar mensagens que falham em várias tentativas de processamento, configure uma fila de cartas mortas (). DLQ Isso garante que as mensagens que não podem ser processadas após várias tentativas sejam capturadas separadamente para análise ou tratamento adicionais, evitando que elas circulem repetidamente na fila principal.