Sondagem curta e longa 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á.

Sondagem curta e longa do Amazon SQS

O Amazon SQS oferece opções de sondagem curta e longa para receber mensagens de uma fila. Considere os requisitos de capacidade de resposta e eficiência de custos do seu aplicativo ao escolher entre essas duas opções de pesquisa:

  • Pesquisa curta (padrão) — A ReceiveMessagesolicitação consulta um subconjunto de servidores (com base em uma distribuição aleatória ponderada) para encontrar as mensagens disponíveis e envia uma resposta imediata, mesmo que nenhuma mensagem seja encontrada.

  • Pesquisa longaReceiveMessageconsulta mensagens em todos os servidores, enviando uma resposta quando pelo menos uma mensagem estiver disponível, até o máximo especificado. Uma resposta vazia será enviada somente se o tempo de espera da pesquisa expirar. Essa opção pode reduzir o número de respostas vazias e potencialmente reduzir os custos.

As seções a seguir explicam os detalhes de sondagens curtas e sondagens longas.

Consumo de mensagens usando sondagem curta

Quando você consome mensagens de uma fila (FIFO ou padrão) usando uma sondagem curta, o Amazon SQS coleta amostras de um subconjunto de seus servidores (com base em uma distribuição aleatória ponderada) e retorna mensagens somente desses servidores. Assim, uma determinada solicitação ReceiveMessage pode não retornar todas as suas mensagens. No entanto, se você tiver menos de 1.000 mensagens na fila, uma solicitação subsequente retornará suas mensagens. Se você continuar consumindo em suas filas, o Amazon SQS obterá amostras de todos os seus servidores, e você receberá todas as mensagens.

O diagrama a seguir mostra o comportamento da sondagem curta de mensagens retornadas de uma fila padrão depois que um dos componentes do sistema faz uma solicitação de recebimento. O Amazon SQS analisa vários dos seus servidores (em cinza) e retorna as mensagens A, C, D e B desses servidores. A mensagem E não é retornada para essa solicitação, mas é retornada para uma solicitação subsequente.

Amostragem de mensagens usando sondagem curta (padrão)

Consumo de mensagens usando a sondagem longa

Quando o tempo de espera da ação da API ReceiveMessage é maior do que 0, a sondagem longa está em vigor. O tempo máximo de espera de sondagem longa é de 20 segundos. A sondagem longa ajuda a reduzir os custos de uso do Amazon SQS eliminando o número de respostas vazias (quando não há mensagens disponíveis para uma solicitação ReceiveMessage) e respostas vazias falsas (quando mensagens estão disponíveis, mas não são incluídas em uma resposta). Para obter informações sobre como habilitar a sondagem longa para uma fila nova ou existente usando o console do Amazon SQS, consulte Configurando parâmetros de fila usando o console do Amazon SQS. Para ver as práticas recomendadas, consulte Configurando uma sondagem longa no Amazon SQS.

A sondagem longa oferece os seguintes benefícios:

  • Reduza as respostas vazias permitindo que o Amazon SQS espere até que uma mensagem esteja disponível em uma fila antes de enviar uma resposta. A menos que uma conexão expire, a resposta à solicitação ReceiveMessage contém pelo menos uma das mensagens disponíveis, até o número máximo de mensagens especificado na ação ReceiveMessage. Em casos raros, você pode receber respostas vazias mesmo quando uma fila ainda contiver mensagens, especialmente se você especificar um valor baixo para o parâmetro ReceiveMessageWaitTimeSeconds.

  • Reduza respostas vazias falsas consultando todos os servidores do Amazon SQS, não apenas um subconjunto deles.

  • Retornar mensagens assim que se tornam disponíveis.

Para obter mais informações sobre como confirmar se uma fila está vazia, consulte Confirmando que uma fila do Amazon SQS está vazia.

Diferenças entre as sondagens longa e curta

A sondagem curta ocorre quando o parâmetro WaitTimeSeconds de uma solicitação ReceiveMessage é definido como 0 de uma de duas maneiras:

  • A chamada ReceiveMessage define WaitTimeSeconds como 0.

  • A chamada ReceiveMessage não define WaitTimeSeconds, mas o atributo da fila ReceiveMessageWaitTimeSeconds é definido como 0.