Habilitar sondeos largos para las colas de mensajes de Amazon SQS - AWS SDK for Java 1.x

Anunciamos la próxima versión end-of-support para AWS SDK for Java (v1). Se recomienda que migre a AWS SDK for Java versión 2. Para ver las fechas, los detalles adicionales y la información sobre cómo realizar la migración, consulte el anuncio enlazado.

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.

nota

Puede definir una frecuencia de sondeo largo de 1-20 segundos.

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 al método createQueue de la clase AmazonSQS.

Importaciones

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.AmazonSQSException; import com.amazonaws.services.sqs.model.CreateQueueRequest;

Code

final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Enable long polling when creating a queue CreateQueueRequest create_request = new CreateQueueRequest() .withQueueName(queue_name) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); try { sqs.createQueue(create_request); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } }

Consulte el ejemplo completo en GitHub.

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 al método setQueueAttributes de la clase AmazonSQS.

Importaciones

import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

Code

SetQueueAttributesRequest set_attrs_request = new SetQueueAttributesRequest() .withQueueUrl(queue_url) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); sqs.setQueueAttributes(set_attrs_request);

Consulte el ejemplo completo en GitHub.

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 proporciona al método receiveMessage de la clase AmazonSQS.

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.

Importaciones

import com.amazonaws.services.sqs.model.ReceiveMessageRequest;

Code

ReceiveMessageRequest receive_request = new ReceiveMessageRequest() .withQueueUrl(queue_url) .withWaitTimeSeconds(20); sqs.receiveMessage(receive_request);

Consulte el ejemplo completo en GitHub.

Más información