

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
<a name="sqs-auto-batch"></a>

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](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)` 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
<a name="sqs-auto-batch-requirements"></a>

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>
```

1 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)

## Création d'un gestionnaire de lots
<a name="sqs-auto-batch-create"></a>

L'API de traitement automatique des demandes par lots est implémentée par l'[SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html)interface. Vous pouvez créer une instance du gestionnaire de plusieurs manières.

### Configuration par défaut en utilisant `SqsAsyncClient`
<a name="sqs-batch-manager-create-default"></a>

Le moyen le plus simple de créer un gestionnaire de lots consiste à appeler la méthode d'`batchManager`usine sur une [SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)instance existante. L'approche simple est illustrée dans l'extrait suivant. 

```
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`](#sqs-auto-batch-config-settings) section. En outre, l'`SqsAsyncBatchManager`instance utilise `ExecutorService` l'`SqsAsyncClient`instance à partir de laquelle elle a été créée.

### Configuration personnalisée en utilisant `SqsAsyncBatchManager.Builder`
<a name="sqs-batch-manager-create-custom"></a>

Pour des cas d'utilisation plus avancés, vous pouvez personnaliser le gestionnaire de lots à l'aide du [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html). En utilisant cette approche pour créer une `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`](#sqs-auto-batch-config-settings) section. Vous pouvez également fournir une personnalisation [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html)pour le gestionnaire de lots en utilisant cette approche.

## Envoyer des messages
<a name="sqs-auto-batch-send"></a>

Pour envoyer des messages avec le gestionnaire de lots, utilisez la `[SqsAsyncBatchManager\$1sendMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#sendMessage(software.amazon.awssdk.services.sqs.model.SendMessageRequest))` 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
<a name="sqs-auto-batch-change-vis"></a>

Vous pouvez modifier le délai de visibilité des messages d'un lot à l'aide de [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer))cette 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 comment appeler la `changeMessageVisibility` méthode.

```
CompletableFuture<ChangeMessageVisibilityResponse> futureOne =
    sqsAsyncBatchManager.changeMessageVisibility(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
ChangeMessageVisibilityResponse response = futureOne.join();
```

## Supprimer des messages
<a name="sqs-auto-batch-delete"></a>

Vous pouvez supprimer des messages par lots à l'aide de [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer))cette 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 comment appeler la `deleteMessage` méthode.

```
CompletableFuture<DeleteMessageResponse> futureOne = 
    sqsAsyncBatchManager.deleteMessage(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
DeleteMessageResponse response = futureOne.join();
```

## Recevoir des messages
<a name="sqs-auto-batch-receive"></a>

### Utiliser les paramètres par défaut
<a name="sqs-auto-batch-receive-default-settings"></a>

Lorsque vous interrogez la `[SqsAsyncBatchManager\$1receiveMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#receiveMessage(java.util.function.Consumer))` 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
<a name="sqs-auto-batch-receive-custom-settings"></a>

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](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)` 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`
<a name="sqs-auto-batch-config-settings"></a>

Vous pouvez ajuster les paramètres suivants lorsque vous créez une `SqsAsyncBatchManager` instance. La liste de paramètres suivante est disponible sur le [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html).


| 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 `maxBatchSize` elle est atteinte plus tôt. Des valeurs plus élevées peuvent réduire les demandes mais augmenter le temps de latence.  | 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ème](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/MessageSystemAttributeName.html) à demander pour les receiveMessage appels. | Aucune | 
| receiveMessageAttributeNames | Liste des [noms d'attributs](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes) à demander pour les receiveMessage appels. | Aucune | 