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á.
Habilitar a sondagem longa para filas de mensagens do Amazon SQS
Por padrão, o Amazon SQS; usa sondagem curta, consultando somente um subconjunto dos servidores, com base em uma distribuição aleatória ponderada, para determinar se há alguma mensagem disponível para inclusão na resposta.
A sondagem longa ajuda a reduzir o custo de usar o Amazon SQS reduzindo o número de respostas vazias quando não há mensagens disponíveis a serem exibidas em resposta a uma solicitação ReceiveMessage enviada a uma fila do Amazon SQS e eliminando respostas vazias falsas. Você pode definir uma frequência de sondagem longa de 1 a 20 segundos.
Pré-requisitos
Antes de começar, recomendamos que você leia Getting started using the AWS SDK para C++.
Baixe o exemplo código de código e crie a solução conforme descrito em Conceitos básicos dos exemplos de código.
Para executar os exemplos, o perfil de usuário que seu código usa para fazer as solicitações deve ter as permissões adequadas na AWS (para o serviço e a ação). Para acessar mais informações, consulte Fornecer credenciais da AWS.
Habilitar a sondagem longa ao criar uma fila
Para habilitar a sondagem longa ao criar uma fila do Amazon SQS, defina o atributo ReceiveMessageWaitTimeSeconds no obmeto CreateQueueRequest antes de chamar a classe membro CreateQueue da classe do SQSClient.
Inclui
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/CreateQueueRequest.h> #include <iostream>
Código da
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::CreateQueueRequest request; request.SetQueueName(queueName); request.AddAttributes( Aws::SQS::Model::QueueAttributeName::ReceiveMessageWaitTimeSeconds, pollTimeSeconds); const Aws::SQS::Model::CreateQueueOutcome outcome = sqsClient.CreateQueue(request); if (outcome.IsSuccess()) { std::cout << "Successfully created queue " << queueName << std::endl; } else { std::cout << "Error creating queue " << queueName << ": " << outcome.GetError().GetMessage() << std::endl; }
Consulte o exemplo completo
Habilitar a sondagem longa em uma fila existente
Além de habilitar a sondagem longa ao criar uma fila, também é possível habilitá-la em uma fila existente definindo ReceiveMessageWaitTimeSeconds na SetQueueAttributesRequest antes de chamar a função de membro SetQueueAttributes da classe do SQSClient.
Inclui
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/SetQueueAttributesRequest.h> #include <iostream>
Código da
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::SetQueueAttributesRequest request; request.SetQueueUrl(queueURL); request.AddAttributes( Aws::SQS::Model::QueueAttributeName::ReceiveMessageWaitTimeSeconds, pollTimeSeconds); const Aws::SQS::Model::SetQueueAttributesOutcome outcome = sqsClient.SetQueueAttributes( request); if (outcome.IsSuccess()) { std::cout << "Successfully updated long polling time for queue " << queueURL << " to " << pollTimeSeconds << std::endl; } else { std::cout << "Error updating long polling time for queue " << queueURL << ": " << outcome.GetError().GetMessage() << std::endl; }
Consulte o exemplo completo
Habilitar sondagem longa no recebimento da mensagem
É possível habilitar a sondagem longa ao receber uma mensagem definindo o tempo de espera em segundos na ReceiveMessageRequest fornecida à função de membro ReceiveMessage da classe do SQSClient.
nota
É necessário verificar se o tempo limite da solicitação do cliente da AWS é maior que o tempo de sondagem longa máximo (20 segundos), de forma que as solicitações ReceiveMessage não expirem enquanto esperam o próximo evento de sondagem.
Inclui
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/ReceiveMessageRequest.h>
Código da
Aws::SQS::SQSClient sqsClient(customConfiguration); Aws::SQS::Model::ReceiveMessageRequest request; request.SetQueueUrl(queueUrl); request.SetMaxNumberOfMessages(1); request.SetWaitTimeSeconds(waitTimeSeconds); auto outcome = sqsClient.ReceiveMessage(request); if (outcome.IsSuccess()) { const auto &messages = outcome.GetResult().GetMessages(); if (messages.empty()) { std::cout << "No messages received from queue " << queueUrl << std::endl; } else { const auto &message = messages[0]; std::cout << "Received message:" << std::endl; std::cout << " MessageId: " << message.GetMessageId() << std::endl; std::cout << " ReceiptHandle: " << message.GetReceiptHandle() << std::endl; std::cout << " Body: " << message.GetBody() << std::endl << std::endl; } } else { std::cout << "Error receiving message from queue " << queueUrl << ": " << outcome.GetError().GetMessage() << std::endl; }
Consulte o exemplo completo
Mais informações
-
Amazon SQS Long Polling no Guia do desenvolvedor do Amazon Simple Queue Service.
-
CreateQueue na Referência de API do Amazon Simple Queue Service.
-
ReceiveMessage na Referência da API do Amazon Simple Queue Service.
-
SetQueueAttributes na Referência de API do Amazon Simple Queue Service.