Utilizza il raggruppamento automatico delle richieste per Amazon SQS con AWS SDK for Java 2.x - AWS SDK for Java 2.x

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,, changeMessageVisibilitydeleteMessage, 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>

1 Ultima versione

Crea un gestore di batch

Il raggruppamento automatico delle richieste API è implementato dall'SqsAsyncBatchManagerinterfaccia. È possibile creare un'istanza del gestore in due modi.

1. Configurazione predefinita utilizzando SqsAsyncClient

Il modo più semplice per creare un gestore di batch consiste nel chiamare il metodo batchManager factory su un'SqsAsyncClientistanza esistente. L'approccio semplice è illustrato nel frammento seguente.

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.

1. Configurazione personalizzata utilizzando SqsAsyncBatchManager.Builder

Per casi d'uso più avanzati, è possibile personalizzare il gestore batch utilizzando SqsAsyncBatchManager.Builder. Utilizzando questo approccio per creare un'SqsAsyncBatchManageristanza, è 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 ScheduledExecutorServiceper il gestore dei batch utilizzando questo approccio.

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#changeMessageVisibilitymetodo. Il SDK bufferizza le richieste e le invia in batch quando vengono raggiunti 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#deleteMessagemetodo. Il SDK buffer li richiede e li invia in batch quando vengono raggiunti 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'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 maxBatchSize venga raggiunto prima. Valori più alti possono ridurre le richieste ma aumentare la latenza.

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 sistema da richiedere per receiveMessage le chiamate. Nessuno
receiveMessageAttributeNames Elenco dei nomi degli attributi da richiedere per receiveMessage le chiamate. Nessuno