Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisez le traitement automatique des demandes par lots pour Amazon SQS avec AWS SDK for Java 2.x
L'Automatic Request Batching API for Amazon SQS est une bibliothèque de haut niveau qui fournit un moyen efficace de regrouper et de mettre en mémoire tampon les demandes pour les SQS opérations. En utilisant le traitement par lotsAPI, vous réduisez le nombre de demandesSQS, ce qui améliore le débit et minimise les coûts.
Comme les API méthodes par lots correspondent aux SqsAsyncClient
méthodes (sendMessage
,,,)changeMessageVisibility
,deleteMessage
,,receiveMessage
,,,, vous pouvez utiliser le lot API en remplacement immédiat avec un minimum de modifications.
Cette rubrique explique comment configurer et utiliser le traitement automatique des demandes par lots API pour AmazonSQS.
Vérifiez les prérequis
Vous devez utiliser la version 2.28.0 ou ultérieure de SDK for Java 2.x pour avoir accès au traitement par lots. API Votre Maven pom.xml
doit au moins contenir les éléments suivants.
<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>
Création d'un gestionnaire de lots
Le traitement automatique des demandes par lots API est implémenté par l'SqsAsyncBatchManager
1. Configuration par défaut en utilisant SqsAsyncClient
Le moyen le plus simple de créer un gestionnaire de lots consiste à appeler la méthode d'batchManager
usine sur une SqsAsyncClient
SqsAsyncClient asyncClient = SqsAsyncClient.create(); SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
Lorsque vous utilisez cette approche, l'SqsAsyncBatchManager
instance utilise les valeurs par défaut indiquées dans le tableau de la Remplacer les paramètres de configuration pour SqsAsyncBatchManager section. En outre, l'SqsAsyncBatchManager
instance utilise ExecutorService
l'SqsAsyncClient
instance à partir de laquelle elle a été créée.
1. Configuration personnalisée en utilisant SqsAsyncBatchManager.Builder
Pour des cas d'utilisation plus avancés, vous pouvez personnaliser le gestionnaire de lots à l'aide du SqsAsyncBatchManager.Builder
SqsAsyncBatchManager
instance, vous pouvez affiner le comportement de traitement par lots. L'extrait suivant montre un exemple d'utilisation du générateur pour personnaliser le comportement de traitement par lots.
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();
Lorsque vous utilisez cette approche, vous pouvez ajuster les paramètres de l'BatchOverrideConfiguration
objet présentés dans le tableau de la Remplacer les paramètres de configuration pour SqsAsyncBatchManager section. Vous pouvez également fournir une personnalisation ScheduledExecutorService
Envoyer des messages
Pour envoyer des messages avec le gestionnaire de lots, utilisez la SqsAsyncBatchManager#sendMessage
méthode. Les SDK buffers les demandes et les envoie sous forme de lot lorsque les sendRequestFrequency
valeurs maxBatchSize
or sont atteintes.
L'exemple suivant montre une sendMessage
demande immédiatement suivie d'une autre demande. Dans ce cas, les SDK deux messages sont envoyés en un seul lot.
// 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();
Modifier le délai de visibilité des messages
Vous pouvez modifier le délai de visibilité des messages d'un lot à l'aide de SqsAsyncBatchManager#changeMessageVisibility
sendRequestFrequency
valeurs maxBatchSize
or sont atteintes.
L'exemple suivant montre comment appeler la changeMessageVisibility
méthode.
CompletableFuture<ChangeMessageVisibilityResponse> futureOne = sqsAsyncBatchManager.changeMessageVisibility(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); ChangeMessageVisibilityResponse response = futureOne.join();
Supprimer des messages
Vous pouvez supprimer des messages par lots à l'aide de SqsAsyncBatchManager#deleteMessage
sendRequestFrequency
valeurs maxBatchSize
or sont atteintes.
L'exemple suivant montre comment appeler la deleteMessage
méthode.
CompletableFuture<DeleteMessageResponse> futureOne = sqsAsyncBatchManager.deleteMessage(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); DeleteMessageResponse response = futureOne.join();
Recevoir des messages
Utiliser les paramètres par défaut
Lorsque vous interrogez la SqsAsyncBatchManager#receiveMessage
méthode dans votre application, le gestionnaire de lots extrait les messages de sa mémoire tampon interne, qui SDK sont automatiquement mis à jour en arrière-plan.
L'exemple suivant montre comment appeler la receiveMessage
méthode.
CompletableFuture<ReceiveMessageResponse> responseFuture = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
Utiliser des paramètres personnalisés
Si vous souhaitez personnaliser davantage la demande, par exemple en définissant des temps d'attente personnalisés et en spécifiant le nombre de messages à récupérer, vous pouvez personnaliser la demande comme indiqué dans l'exemple suivant.
CompletableFuture<ReceiveMessageResponse> response = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl") .waitTimeSeconds(5) .visibilityTimeout(20));
Note
Si vous appelez receiveMessage
avec un ReceiveMessageRequest
qui inclut l'un des paramètres suivants, SDK contourne le gestionnaire de lots et envoie une demande asynchrone receiveMessage
normale :
-
messageAttributeNames
-
messageSystemAttributeNames
-
messageSystemAttributeNamesWithStrings
-
overrideConfiguration
Remplacer les paramètres de configuration pour SqsAsyncBatchManager
Vous pouvez ajuster les paramètres suivants lorsque vous créez une SqsAsyncBatchManager
instance. La liste de paramètres suivante est disponible sur le BatchOverrideConfiguration.Builder
Paramètre | Description | Valeur par défaut |
---|---|---|
maxBatchSize |
Nombre maximum de demandes par lot pour chaque SendMessageBatchRequest ChangeMessageVisibilityBatchRequest , ouDeleteMessageBatchRequest . La valeur maximale est 10. |
10 |
sendRequestFrequency |
Durée avant l'envoi d'un lot, sauf si |
200 ms |
receiveMessageVisibilityTimeout |
Expiration du délai de visibilité pour les messages. S'il n'est pas défini, la valeur par défaut de la file d'attente est utilisée. | Par défaut de la file d'attente |
receiveMessageMinWaitDuration |
Temps d'attente minimal pour les receiveMessage demandes. Évitez de mettre à 0 pour éviter le CPU gaspillage. |
50 ms |
receiveMessageSystemAttributeNames |
Liste des noms d'attributs systèmereceiveMessage appels. |
Aucun |
receiveMessageAttributeNames |
Liste des noms d'attributs à demander pour les receiveMessage appels. |
Aucun |