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 raggruppamento automatico delle richieste per Amazon SQS con AWS SDK for Java 2.x
Automatic Request Batching API for Amazon SQS è una libreria di alto livello che fornisce un modo efficiente per creare batch e bufferizzare le richieste operative. SQS Utilizzando il batchingAPI, riduci il numero di richieste aSQS, il che migliora la produttività e minimizza i costi.
Poiché i API metodi batch corrispondono ai SqsAsyncClient
metodi—sendMessage
,, changeMessageVisibility
deleteMessage
, receiveMessage
—è possibile utilizzare il batch API come sostituto immediato con modifiche minime.
Questo argomento offre una panoramica su come configurare e utilizzare Automatic Request Batching API per AmazonSQS.
Verifica i prerequisiti
È necessario utilizzare la versione 2.28.0 o successiva di Java 2.x SDK per avere accesso al batching. API 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
Il raggruppamento automatico delle richieste API è implementato dall'SqsAsyncBatchManager
1. 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'SqsAsyncBatchManager
istanza utilizza i valori predefiniti mostrati nella tabella della sezione. Sostituisci le impostazioni di configurazione per SqsAsyncBatchManager Inoltre, l'SqsAsyncBatchManager
istanza utilizza ExecutorService
l'SqsAsyncClient
istanza da cui è stata creata.
1. Configurazione personalizzata utilizzando SqsAsyncBatchManager.Builder
Per casi d'uso più avanzati, è possibile personalizzare il gestore batch utilizzando SqsAsyncBatchManager.Builder
SqsAsyncBatchManager
istanza, è 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'BatchOverrideConfiguration
oggetto 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. Il SDK buffer le richieste e le invia in 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, 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#changeMessageVisibility
sendRequestFrequency
i valori maxBatchSize
o.
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#deleteMessage
sendRequestFrequency
i valori maxBatchSize
o.
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 si esegue il polling del SqsAsyncBatchManager#receiveMessage
metodo nell'applicazione, il gestore batch recupera i messaggi dal suo buffer interno, che SDK vengono aggiornati 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 si chiama receiveMessage
con un ReceiveMessageRequest
che include uno dei seguenti parametri, SDK ignora il gestore batch e invia una richiesta asincrona regolare: receiveMessage
-
messageAttributeNames
-
messageSystemAttributeNames
-
messageSystemAttributeNamesWithStrings
-
overrideConfiguration
Sostituisci le impostazioni di configurazione per SqsAsyncBatchManager
È possibile modificare le seguenti impostazioni quando si crea un'SqsAsyncBatchManager
istanza. Il seguente elenco di impostazioni è disponibile in BatchOverrideConfiguration.Builder
Impostazione | Descrizione | Valore predefinito |
---|---|---|
maxBatchSize |
Numero massimo di richieste per batch per ciascuna SendMessageBatchRequest ChangeMessageVisibilityBatchRequest , 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 CPU sprechi. |
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 |