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 sondagem curta e sondagem longa para receber mensagens de uma fila. Por padrão, as filas usam a sondagem curta.

Com uma sondagem curta, a solicitação ReceiveMessage consulta apenas um subconjunto dos servidores (com base em uma distribuição aleatória ponderada) para localizar mensagens que estejam disponíveis para incluir na resposta. O Amazon SQS envia a resposta imediatamente, mesmo que a consulta não tenha encontrado qualquer mensagem.

Com uma sondagem longa, a solicitação ReceiveMessage consulta todos os servidores em busca de mensagens. O Amazon SQS envia uma resposta depois de coletar pelo menos uma mensagem disponível, até o número máximo de mensagens especificado na solicitação. O Amazon SQS enviará uma resposta vazia somente se o tempo de espera de sondagem expirar.

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

Consumo de mensagens usando sondagem curta

Quando você consome as mensagens de uma fila usando a sondagem curta, o Amazon SQS obtém amostras de um subconjunto de seus servidores (com base em uma distribuição aleatória ponderada) e retorna mensagens apenas 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 a 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 Configurar parâmetros de fila (console). Para ver as melhores práticas, consulte Configuração da sondagem longa.

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 Confirmar que uma fila 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.