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.
Utiliza el procesamiento automático por lotes de solicitudes para Amazon SQS con el AWS SDK for Java 2.x
El procesamiento automático de solicitudes API por lotes para Amazon SQS es una biblioteca de alto nivel que proporciona una forma eficiente de agrupar y almacenar en búfer las solicitudes de SQS operaciones. Al utilizar el procesamiento por lotesAPI, se reduce el número de solicitudesSQS, lo que mejora el rendimiento y minimiza los costes.
Como los API métodos por lotes coinciden con los SqsAsyncClient
métodos (sendMessage
,, changeMessageVisibility
deleteMessage
, receiveMessage
—), puede utilizar el lote API como sustituto directo con cambios mínimos.
En este tema se ofrece información general sobre cómo configurar y trabajar con el procesamiento automático de solicitudes API por lotes para AmazonSQS.
Requisitos previos
Debe utilizar la versión 2.28.0 o posterior de la versión 2.x SDK para Java para tener acceso al procesamiento por lotes. API Tu Maven pom.xml
debe contener al menos los siguientes elementos.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.28.231
</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
</dependencies>
Cree un administrador de lotes
La SqsAsyncBatchManager
1. Configuración predeterminada mediante SqsAsyncClient
La forma más sencilla de crear un administrador de lotes es llamar al método de batchManager
fábrica en una SqsAsyncClient
SqsAsyncClient asyncClient = SqsAsyncClient.create(); SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
Al usar este enfoque, la SqsAsyncBatchManager
instancia usa los valores predeterminados que se muestran en la tabla de la sección. Anule los ajustes de configuración de SqsAsyncBatchManager Además, la SqsAsyncBatchManager
instancia usa la SqsAsyncClient
instancia a partir ExecutorService
de la cual se creó.
1. Configuración personalizada mediante SqsAsyncBatchManager.Builder
Para casos de uso más avanzados, puede personalizar el administrador de lotes mediante el SqsAsyncBatchManager.Builder
SqsAsyncBatchManager
instancia, puedes ajustar el comportamiento del procesamiento por lotes. En el siguiente fragmento se muestra un ejemplo de cómo usar el generador para personalizar el comportamiento del procesamiento por lotes.
SqsAsyncBatchManager batchManager = SqsAsyncBatchManager.builder() .client(SqsAsyncClient.create()) .scheduledExecutor(Executors.newScheduledThreadPool(5)) .overrideConfiguration(b -> b .receiveMessageMinWaitDuration(Duration.ofSeconds(10)) .receiveMessageVisibilityTimeout(Duration.ofSeconds(1)) .receiveMessageAttributeNames(Collections.singletonList("*")) .receiveMessageSystemAttributeNames(Collections.singletonList(MessageSystemAttributeName.ALL))) .build();
Si utiliza este enfoque, puede ajustar la configuración del BatchOverrideConfiguration
objeto que se muestra en la tabla de la sección. Anule los ajustes de configuración de SqsAsyncBatchManager También puede proporcionar una personalización ScheduledExecutorService
Enviar mensajes
Para enviar mensajes con el administrador de lotes, utilice el SqsAsyncBatchManager#sendMessage
método. Almacena las solicitudes en SDK búfer y las envía como un lote cuando se alcanzan sendRequestFrequency
los valores maxBatchSize
o.
En el siguiente ejemplo, se muestra una sendMessage
solicitud seguida inmediatamente de otra solicitud. En este caso, SDK envía ambos mensajes en un solo lote.
// Sending the first message CompletableFuture<SendMessageResponse> futureOne = sqsAsyncBatchManager.sendMessage(r -> r.messageBody("One").queueUrl("queue")); // Sending the second message CompletableFuture<SendMessageResponse> futureTwo = sqsAsyncBatchManager.sendMessage(r -> r.messageBody("Two").queueUrl("queue")); // Waiting for both futures to complete and retrieving the responses SendMessageResponse messageOne = futureOne.join(); SendMessageResponse messageTwo = futureTwo.join();
Cambie el tiempo de espera de visibilidad del mensaje
Puede cambiar el tiempo de espera de visibilidad de los mensajes de un lote mediante este método. SqsAsyncBatchManager#changeMessageVisibility
sendRequestFrequency
valores maxBatchSize
o.
El siguiente ejemplo muestra cómo llamar al changeMessageVisibility
método.
CompletableFuture<ChangeMessageVisibilityResponse> futureOne = sqsAsyncBatchManager.changeMessageVisibility(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); ChangeMessageVisibilityResponse response = futureOne.join();
Cómo eliminar mensajes
Puede eliminar los mensajes de un lote mediante el SqsAsyncBatchManager#deleteMessage
sendRequestFrequency
los valores maxBatchSize
o.
El siguiente ejemplo muestra cómo se puede llamar al deleteMessage
método.
CompletableFuture<DeleteMessageResponse> futureOne = sqsAsyncBatchManager.deleteMessage(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); DeleteMessageResponse response = futureOne.join();
Recibe mensajes
Usa la configuración predeterminada
Cuando sondea el SqsAsyncBatchManager#receiveMessage
método en su aplicación, el administrador de lotes recupera los mensajes de su búfer interno, que luego actualiza SDK automáticamente en segundo plano.
El siguiente ejemplo muestra cómo llamar al receiveMessage
método.
CompletableFuture<ReceiveMessageResponse> responseFuture = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
Utilice una configuración personalizada
Si desea personalizar aún más la solicitud, por ejemplo, configurando tiempos de espera personalizados y especificando el número de mensajes que se van a recuperar, puede personalizar la solicitud como se muestra en el siguiente ejemplo.
CompletableFuture<ReceiveMessageResponse> response = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl") .waitTimeSeconds(5) .visibilityTimeout(20));
nota
Si llamas receiveMessage
con un parámetro ReceiveMessageRequest
que incluye alguno de los siguientes parámetros, SDK omite el administrador de lotes y envía una solicitud asíncrona receiveMessage
normal:
-
messageAttributeNames
-
messageSystemAttributeNames
-
messageSystemAttributeNamesWithStrings
-
overrideConfiguration
Anule los ajustes de configuración de SqsAsyncBatchManager
Puede ajustar los siguientes parámetros al crear una SqsAsyncBatchManager
instancia. La siguiente lista de ajustes está disponible en BatchOverrideConfiguration.Builder
Opción | Descripción | Valor predeterminado |
---|---|---|
maxBatchSize |
Número máximo de solicitudes por lote para cada SendMessageBatchRequest ChangeMessageVisibilityBatchRequest , oDeleteMessageBatchRequest . El valor máximo es 10. |
10 |
sendRequestFrequency |
Tiempo antes de enviar un lote, a menos que |
200 ms |
receiveMessageVisibilityTimeout |
Tiempo de espera de visibilidad para los mensajes. Si no se establece, se utiliza el valor predeterminado de la cola. | La cola es la predeterminada |
receiveMessageMinWaitDuration |
Tiempo mínimo de espera para receiveMessage las solicitudes. Evite ponerla en 0 para evitar CPU desperdicios. |
50 ms |
receiveMessageSystemAttributeNames |
Lista de nombres de atributos del sistemareceiveMessage llamadas. |
Ninguna |
receiveMessageAttributeNames |
Lista de nombres de atributos para solicitar receiveMessage llamadas. |
Ninguna |