Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizza il batching automatico delle richieste per Amazon SQS con AWS SDK for Java 2.x
L'API Automatic Request Batching per Amazon SQS è una libreria di alto livello che fornisce un modo efficiente per creare batch e bufferizzare le richieste per le operazioni SQS. Utilizzando l'API di batching, riduci il numero di richieste a SQS, il che migliora la produttività e minimizza i costi.
Poiché i metodi dell'API batch corrispondono ai SqsAsyncClient metodi—sendMessage,, changeMessageVisibilitydeleteMessage, receiveMessage —puoi utilizzare l'API batch come sostituto immediato con modifiche minime.
Questo argomento offre una panoramica su come configurare e utilizzare l'API Automatic Request Batching per Amazon SQS.
Verifica i prerequisiti
È necessario utilizzare la versione 2.28.0 o successiva dell'SDK for Java 2.x per avere accesso all'API di batch. Il tuo Maven pom.xml dovrebbe contenere almeno i seguenti elementi.
<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>
Crea un gestore di batch
L'API di raggruppamento automatico delle richieste è implementata dall'SqsAsyncBatchManager
Configurazione predefinita utilizzando SqsAsyncClient
Il modo più semplice per creare un gestore di batch consiste nel chiamare il metodo batchManager factory su un'SqsAsyncClient
SqsAsyncClient asyncClient = SqsAsyncClient.create(); SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
Quando utilizzate questo approccio, l'SqsAsyncBatchManageristanza utilizza i valori predefiniti mostrati nella tabella della sezione. Sostituisci le impostazioni di configurazione per SqsAsyncBatchManager Inoltre, l'SqsAsyncBatchManageristanza utilizza ExecutorService l'SqsAsyncClientistanza da cui è stata creata.
Configurazione personalizzata utilizzando SqsAsyncBatchManager.Builder
Per casi d'uso più avanzati, è possibile personalizzare il gestore batch utilizzando SqsAsyncBatchManager.BuilderSqsAsyncBatchManageristanza, è possibile ottimizzare il comportamento di batch. Il seguente frammento mostra un esempio di come utilizzare il builder per personalizzare il comportamento del batch.
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();
Quando utilizzate questo approccio, potete regolare le impostazioni sull'BatchOverrideConfigurationoggetto mostrate nella tabella della sezione. Sostituisci le impostazioni di configurazione per SqsAsyncBatchManager È inoltre possibile fornire una personalizzazione ScheduledExecutorService
Inviare messaggi
Per inviare messaggi con il gestore batch, usa il SqsAsyncBatchManager#sendMessage metodo. L'SDK memorizza le richieste nel buffer e le invia come batch quando vengono raggiunti sendRequestFrequency i valori maxBatchSize or.
L'esempio seguente mostra una sendMessage richiesta immediatamente successiva a un'altra richiesta. In questo caso, l'SDK invia entrambi i messaggi in un unico batch.
// 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();
Modifica il timeout di visibilità dei messaggi
È possibile modificare il timeout di visibilità dei messaggi in un batch utilizzando il SqsAsyncBatchManager#changeMessageVisibilitysendRequestFrequency i valori maxBatchSize or.
L'esempio seguente mostra come chiamare il changeMessageVisibility metodo.
CompletableFuture<ChangeMessageVisibilityResponse> futureOne = sqsAsyncBatchManager.changeMessageVisibility(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); ChangeMessageVisibilityResponse response = futureOne.join();
Eliminare i messaggi
È possibile eliminare i messaggi in batch utilizzando il SqsAsyncBatchManager#deleteMessagesendRequestFrequency i valori maxBatchSize or.
L'esempio seguente mostra come chiamare il deleteMessage metodo.
CompletableFuture<DeleteMessageResponse> futureOne = sqsAsyncBatchManager.deleteMessage(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); DeleteMessageResponse response = futureOne.join();
Ricevere messaggi
Usa le impostazioni predefinite
Quando esegui il polling del SqsAsyncBatchManager#receiveMessage metodo nell'applicazione, il gestore batch recupera i messaggi dal suo buffer interno, che l'SDK aggiorna automaticamente in background.
L'esempio seguente mostra come chiamare il metodo. receiveMessage
CompletableFuture<ReceiveMessageResponse> responseFuture = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
Usa impostazioni personalizzate
Se desideri personalizzare ulteriormente la richiesta, ad esempio impostando tempi di attesa personalizzati e specificando il numero di messaggi da recuperare, puoi personalizzare la richiesta come mostrato nell'esempio seguente.
CompletableFuture<ReceiveMessageResponse> response = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl") .waitTimeSeconds(5) .visibilityTimeout(20));
Nota
Se chiami receiveMessage con un ReceiveMessageRequest che include uno dei seguenti parametri, l'SDK ignora il gestore batch e invia una normale richiesta asincrona: receiveMessage
-
messageAttributeNames -
messageSystemAttributeNames -
messageSystemAttributeNamesWithStrings -
overrideConfiguration
Sostituisci le impostazioni di configurazione per SqsAsyncBatchManager
È possibile modificare le seguenti impostazioni quando si crea un'SqsAsyncBatchManageristanza. Il seguente elenco di impostazioni è disponibile in BatchOverrideConfiguration.Builder
| Impostazione | Descrizione | Valore predefinito |
|---|---|---|
maxBatchSize |
Numero massimo di richieste per batch per ciascuna SendMessageBatchRequestChangeMessageVisibilityBatchRequest, oDeleteMessageBatchRequest. Il valore massimo è 10. |
10 |
sendRequestFrequency |
Tempo prima dell'invio di un batch, a meno che non |
200 ms |
receiveMessageVisibilityTimeout |
Timeout di visibilità per i messaggi. Se non è impostato, viene utilizzato il valore predefinito della coda. | L'impostazione predefinita della coda |
receiveMessageMinWaitDuration |
Tempo di attesa minimo per le receiveMessage richieste. Evita di impostarlo su 0 per evitare sprechi di CPU. |
50 ms |
receiveMessageSystemAttributeNames |
Elenco dei nomi degli attributi di sistemareceiveMessage le chiamate. |
Nessuno |
receiveMessageAttributeNames |
Elenco dei nomi degli attributi da richiedere per receiveMessage le chiamate. |
Nessuno |