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'API Automatic Request Batching pour 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 opérations SQS. En utilisant l'API de traitement par lots, vous réduisez le nombre de demandes adressées à SQS, ce qui améliore le débit et minimise les coûts.
Comme les méthodes de l'API par lots correspondent aux SqsAsyncClient méthodes (sendMessage,,,),changeMessageVisibility,deleteMessage,,receiveMessage,,,,,,, vous pouvez utiliser l'API par lots en remplacement avec un minimum de modifications.
Cette rubrique explique comment configurer et utiliser l'API Automatic Request Batching pour Amazon SQS.
Vérifiez les prérequis
Vous devez utiliser la version 2.28.0 ou ultérieure du SDK pour Java 2.x pour avoir accès à l'API de traitement par lots. 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
L'API de traitement automatique des demandes par lots est implémentée par l'SqsAsyncBatchManager
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'batchManagerusine sur une SqsAsyncClient
SqsAsyncClient asyncClient = SqsAsyncClient.create(); SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
Lorsque vous utilisez cette approche, l'SqsAsyncBatchManagerinstance 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'SqsAsyncBatchManagerinstance utilise ExecutorService l'SqsAsyncClientinstance à partir de laquelle elle a été créée.
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.BuilderSqsAsyncBatchManager 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'BatchOverrideConfigurationobjet 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. Le SDK met en mémoire tampon 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, le SDK envoie les deux messages 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#changeMessageVisibilitysendRequestFrequency 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#deleteMessagesendRequestFrequency 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, que le SDK met automatiquement à 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, le 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 SendMessageBatchRequestChangeMessageVisibilityBatchRequest, ouDeleteMessageBatchRequest. La valeur maximale est 10. |
10 |
sendRequestFrequency |
Durée avant l'envoi d'un lot, sauf si |
200 ms |
receiveMessageVisibilityTimeout |
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 gaspillage du processeur. |
50 ms |
receiveMessageSystemAttributeNames |
Liste des noms d'attributs systèmereceiveMessage appels. |
Aucun |
receiveMessageAttributeNames |
Liste des noms d'attributs à demander pour les receiveMessage appels. |
Aucun |