

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
<a name="examples-sqs-long-polling"></a>

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.

Las votaciones prolongadas ayudan a reducir el costo de usar Amazon SQS al reducir el número de respuestas vacías cuando no hay mensajes disponibles para devolver en respuesta a una ReceiveMessage solicitud enviada a una cola de Amazon SQS y eliminando las respuestas falsas vacías. Puede definir una frecuencia de sondeo largo de *1-20 segundos*.

## Requisitos previos
<a name="codeExamplePrereq"></a>

Antes de comenzar, le recomendamos que lea [Primeros pasos con el AWS SDK para C\$1\$1](getting-started.md). 

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](getting-started-code-examples.md). 

Para ejecutar los ejemplos, el perfil de usuario que utilice su código para realizar las solicitudes debe tener los permisos adecuados AWS (tanto para el servicio como para la acción). Para obtener más información, consulte [Proporcionar AWS credenciales](credentials.md).

## Cómo habilitar el sondeo largo al crear una cola
<a name="sqs-long-polling-create-queue"></a>

Para habilitar un sondeo prolongado al crear una cola de Amazon SQS, defina el `ReceiveMessageWaitTimeSeconds` atributo en el [CreateQueueRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_create_queue_request.html)objeto antes de llamar a la función miembro de la SQSClient clase`CreateQueue`.

 **Incluye** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/CreateQueueRequest.h>
#include <iostream>
```

 **Código** 

```
    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](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/long_polling_on_create_queue.cpp)

## Habilitar el sondeo largo en una cola existente
<a name="sqs-long-polling-existing-queue"></a>

Además de habilitar un sondeo prolongado al crear una cola, también puede habilitarlo en una cola existente activando la `ReceiveMessageWaitTimeSeconds` función [SetQueueAttributesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_set_queue_attributes_request.html)antes de llamar al miembro de la SQSClient clase. `SetQueueAttributes`

 **Incluye** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/SetQueueAttributesRequest.h>
#include <iostream>
```

 **Código** 

```
    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](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/long_polling_on_existing_queue.cpp)

## Habilitar el sondeo largo al recibir un mensaje
<a name="sqs-long-polling-receive-message"></a>

Puede habilitar un sondeo prolongado al recibir un mensaje configurando el tiempo de espera en segundos del [ReceiveMessageRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_receive_message_request.html)que proporcione a la función ReceiveMessage miembro de SQSClient la clase.

**nota**  
¡Asegúrese de que el tiempo de espera de la solicitud del AWS cliente sea superior al tiempo máximo de sondeo (20 segundos) para que sus `ReceiveMessage` solicitudes no se agoten mientras esperan al próximo evento de votación\$1

 **Incluye** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/ReceiveMessageRequest.h>
```

 **Código** 

```
    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](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/long_polling_on_message_receipt.cpp)

## Más información
<a name="more-info"></a>
+  [Sondeo largo de Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html) en la Guía para desarrolladores de Amazon Simple Queue Service
+  [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)en la referencia de la API de Amazon Simple Queue Service
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)en la referencia de la API de Amazon Simple Queue Service
+  [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)en la referencia de la API de Amazon Simple Queue Service