Habilitación del almacenamiento en búfer del lado del cliente y del agrupamiento en lotes de solicitudes - Amazon Simple Queue Service

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.

Habilitación del almacenamiento en búfer del lado del cliente y del agrupamiento en lotes de solicitudes

AWS SDK for Java incluye AmazonSQSBufferedAsyncClient que tiene acceso a Amazon SQS. Este cliente permite agrupar fácilmente en lotes las solicitudes mediante el almacenamiento en búfer en el cliente, en el que las llamadas realizadas desde el cliente primero se almacenan en búfer y después se envían como una solicitud por lotes a Amazon SQS.

El almacenamiento en búfer en el cliente permite almacenar en búfer hasta diez solicitudes y enviarlas como una solicitud por lotes, lo que disminuye el costo de uso de Amazon SQS y el número de solicitudes enviadas. AmazonSQSBufferedAsyncClient almacena en búfer tanto las llamadas sincrónicas como las asincrónicas. Las solicitudes por lotes y la compatibilidad con los sondeos largos también pueden contribuir a mejorar el rendimiento. Para obtener más información, consulte Aumento del rendimiento mediante el escalado horizontal y agrupación en lotes de acciones de la.

Dado que AmazonSQSBufferedAsyncClient implementa la misma interfaz que AmazonSQSAsyncClient, la migración de AmazonSQSAsyncClient a AmazonSQSBufferedAsyncClient solo suele requerir cambios mínimos en el código.

nota

El cliente asincrónico con búfer de Amazon SQS no admite actualmente las colas FIFO.

Uso de AmazonSQSBufferedAsyncClient

Antes de comenzar, complete los pasos de Configuración de Amazon SQS.

importante

AWS SDK for Java 2.x no es compatible actualmente con AmazonSQSBufferedAsyncClient.

Puede crear un nuevo cliente AmazonSQSBufferedAsyncClient basado en AmazonSQSAsyncClient; por ejemplo:

// Create the basic Amazon SQS async client final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); // Create the buffered client final AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync);

Después de crear el nuevo AmazonSQSBufferedAsyncClient, puede utilizarlo para enviar varias solicitudes a Amazon SQS (del mismo modo que con AmazonSQSAsyncClient), por ejemplo:

final CreateQueueRequest createRequest = new CreateQueueRequest().withQueueName("MyQueue"); final CreateQueueResult res = bufferedSqs.createQueue(createRequest); final SendMessageRequest request = new SendMessageRequest(); final String body = "Your message text" + System.currentTimeMillis(); request.setMessageBody( body ); request.setQueueUrl(res.getQueueUrl()); final Future<SendMessageResult> sendResult = bufferedSqs.sendMessageAsync(request); final ReceiveMessageRequest receiveRq = new ReceiveMessageRequest() .withMaxNumberOfMessages(1) .withQueueUrl(queueUrl); final ReceiveMessageResult rx = bufferedSqs.receiveMessage(receiveRq);

Configuración de AmazonSQSBufferedAsyncClient

AmazonSQSBufferedAsyncClient está preconfigurado con ajustes válidos para la mayoría de los casos de uso. Se pueden configurar ajustes adicionales de AmazonSQSBufferedAsyncClient; por ejemplo:

  1. Crear una instancia de la clase QueueBufferConfig con los parámetros de configuración necesarios.

  2. Proporcionar la instancia al constructor AmazonSQSBufferedAsyncClient.

// Create the basic Amazon SQS async client final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); final QueueBufferConfig config = new QueueBufferConfig() .withMaxInflightReceiveBatches(5) .withMaxDoneReceiveBatches(15); // Create the buffered client final AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync, config);
Parámetros de configuración de QueueBufferConfig
Parámetro Valor predeterminado Descripción
longPoll true

Cuando longPoll se establece en true, AmazonSQSBufferedAsyncClient intenta utilizar el sondeo largo a la hora de consumir mensajes.

longPollWaitTimeoutSeconds 20 s

El tiempo máximo, en segundos, que una llamada a ReceiveMessage se bloquea en el servidor a la espera de que aparezcan mensajes en la cola antes de devolver un resultado de recepción vacío.

nota

Este parámetro no tiene ningún efecto cuando el sondeo largo está deshabilitado.

maxBatchOpenMs 200ms

El tiempo máximo, en milisegundos, que una llamada saliente espera otras llamadas para procesar por lotes mensajes del mismo tipo.

Cuanto mayor sea el valor, menos lotes son necesarios para realizar la misma cantidad de trabajo (no obstante, la primera llamada de un lote tiene que esperar más tiempo).

Cuando se establece este parámetro en 0, las solicitudes enviadas no esperan a otras solicitudes, lo que en la práctica deshabilita el procesamiento por lotes.

maxBatchSize 10 solicitudes por lote

El número máximo de mensajes que se procesan juntos por lotes en una sola solicitud. Cuanto mayor sea la configuración, menos lotes serán necesarios para llevar a cabo el mismo número de solicitudes.

nota

El valor máximo permitido para Amazon SQS es de diez solicitudes por lote.

maxBatchSizeBytes 256 KB

El tamaño máximo de un lote de mensajes, en bytes, que el cliente intenta enviar a Amazon SQS.

nota

El valor máximo permitido para Amazon SQS es de 256 KB.

maxDoneReceiveBatches 10 lotes

El número máximo de lotes de recepción que AmazonSQSBufferedAsyncClient captura previamente y almacena en el lado del cliente.

Cuanto mayor sea el valor, más solicitudes de recepción podrán satisfacerse sin tener que realizar una llamada a Amazon SQS (sin embargo, cuantos más mensajes se capturen previamente, más tiempo permanecerán en el búfer, lo que hará que caduque su propio tiempo de espera de visibilidad).

nota

0 indica que se ha deshabilitado la captura previa de mensajes y que estos solo se consumen bajo demanda.

maxInflightOutboundBatches 5 lotes

El número máximo de lotes salientes activos que se pueden procesar al mismo tiempo.

Cuanto mayor sea el valor, más rápido se podrán enviar los lotes salientes (sujeto a cuotas como la CPU o el ancho de banda) y más subprocesos podrá consumir AmazonSQSBufferedAsyncClient.

maxInflightReceiveBatches 10 lotes

El número máximo de lotes de recepción activos que se pueden procesar al mismo tiempo.

Cuanto mayor sea el valor, más mensajes de podrán recibir (sujeto a cuotas como la CPU o el ancho de banda) y más subprocesos podrá consumir AmazonSQSBufferedAsyncClient.

nota

0 indica que se ha deshabilitado la captura previa de mensajes y que estos solo se consumen bajo demanda.

visibilityTimeoutSeconds -1

Cuando este parámetro se establece en un valor positivo distinto de cero, el tiempo de espera de visibilidad que se establece aquí anula el tiempo de espera de visibilidad definido en la cola desde la que se consumen los mensajes.

nota

-1 indica que está seleccionada la configuración predeterminada de la cola.

No se puede establecer el tiempo de espera de visibilidad en 0.