Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Habilitar sondeos largos para las colas de mensajes de Amazon SQS
Amazon SQS utiliza el sondeo corto de forma predeterminada: consulta únicamente un subconjunto de los servidores (en función de una distribución aleatoria ponderada) para determinar si hay algún mensaje disponible para su inclusión en la respuesta.
El sondeo largo ayuda a reducir el costo de uso de Amazon SQS al reducir el número de respuestas vacías (cuando no hay ningún mensaje disponible para devolver como respuesta a una solicitud ReceiveMessage enviada a una cola de Amazon SQS y eliminar falsas respuestas vacías. Puede definir una frecuencia de sondeo largo de 1-20 segundos.
Requisitos previos
Antes de comenzar, le recomendamos que lea Primeros pasos con el AWS SDK para C++.
Descargue el código de ejemplo y compile la solución tal y como se describe en Introducción a los ejemplos de código.
Para ejecutar los ejemplos, el perfil de usuario que su código utilice para realizar las solicitudes debe tener los permisos adecuados en AWS (para el servicio y la acción). Para obtener más información, consulte Proporcionar credenciales de AWS.
Cómo habilitar el sondeo largo al crear una cola
Para habilitar el sondeo largo al crear una cola de Amazon SQS, establezca el atributo ReceiveMessageWaitTimeSeconds en el objeto CreateQueueRequest antes de llamar a la función miembro CreateQueue de la clase SQSClient.
Incluye
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/CreateQueueRequest.h> #include <iostream>
Código de
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 el ejemplo completo
Habilitar el sondeo largo en una cola existente
Además de habilitar el sondeo largo al crear una cola, también puede habilitarlo en una cola existente estableciendo ReceiveMessageWaitTimeSeconds en SetQueueAttributesRequest antes de llamar a la función miembro SetQueueAttributes de la clase SQSClient.
Incluye
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/SetQueueAttributesRequest.h> #include <iostream>
Código de
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 el ejemplo completo
Habilitar el sondeo largo al recibir un mensaje
Puede habilitar el sondeo largo al recibir un mensaje estableciendo el tiempo de espera en segundos en el objeto ReceiveMessageRequest que proporcione a la función miembro ReceiveMessage de la clase SQSClient.
nota
Debe asegurarse de que el tiempo de espera de la solicitud del cliente de AWS sea mayor que el tiempo del sondeo largo (20 segundos) para que no se agote el tiempo de espera de sus solicitudes ReceiveMessage mientras espera al siguiente evento de sondeo.
Incluye
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/ReceiveMessageRequest.h>
Código de
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 el ejemplo completo
Más información
-
Sondeo largo de Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue Service
-
CreateQueue en la Referencia de la API de Amazon Simple Queue Service
-
ReceiveMessage en la Referencia de la API de Amazon Simple Queue Service
-
SetQueueAttributes en la Referencia de la API de Amazon Simple Queue Service