

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.

# Exemples de SDK Java Amazon SQS
<a name="sqs-java-tutorials"></a>

Vous AWS SDK pour Java permet de créer des applications Java qui interagissent avec Amazon SQS et d'autres. Services AWS
+ Pour installer et configurer le SDK, reportez-vous à la section [Premiers pas](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getting-started.html) du *Guide du développeur AWS SDK for Java 2.x *.
+ *Pour les opérations de base relatives aux files d'attente, telles que la création d'une file d'attente ou l'envoi d'un message, consultez la section Travailler avec les files d'attente de messages [Amazon SQS dans le manuel du développeur](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/sqs-examples.html).AWS SDK for Java 2.x *
+ Ce guide inclut également des exemples de fonctionnalités supplémentaires d'Amazon SQS, telles que :
  + [Utilisation du chiffrement côté serveur avec les files d'attente Amazon SQS](sqs-java-configure-sse.md)
  + [Configuration des balises pour une file d'attente Amazon SQS](sqs-java-add-update-remove-tag-queue.md)
  + [Envoi d'attributs de message à une file d'attente Amazon SQS](sqs-java-send-message-with-attributes.md)

# Utilisation du chiffrement côté serveur avec les files d'attente Amazon SQS
<a name="sqs-java-configure-sse"></a>

Utilisez le AWS SDK pour Java pour ajouter un chiffrement côté serveur (SSE) à une file d'attente Amazon SQS. Chaque file d'attente utilise une clé KMS AWS Key Management Service (AWS KMS) pour générer les clés de chiffrement des données. Cet exemple utilise la clé KMS gérée par AWS pour Amazon SQS.

Pour en savoir plus sur l'utilisation du SSE et sur le rôle de la clé KMS, consultez [Chiffrement au repos dans Amazon SQS](sqs-server-side-encryption.md). 

## Ajout du SSE à une file d'attente existante
<a name="sqs-java-configure-sse-existing-queue"></a>

Pour activer le chiffrement côté serveur pour une file d'attente existante, utilisez la méthode `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` afin de définir l'attribut `KmsMasterKeyId`.

L'exemple de code suivant définit la clé KMS AWS KMS key comme clé KMS AWS gérée pour Amazon SQS. L'exemple définit également la [période de réutilisation de la AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) sur 140 secondes.

 Avant d'exécuter l'exemple de code, assurez-vous d'avoir défini vos AWS informations d'identification. Pour plus d'informations, consultez la section [Configurer les AWS informations d'identification et la région pour le développement](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) dans le *guide du AWS SDK for Java 2.x développeur*. 

```
    public static void addEncryption(String queueName, String kmsMasterKeyAlias) {
        SqsClient sqsClient = SqsClient.create();

        GetQueueUrlRequest urlRequest = GetQueueUrlRequest.builder()
                .queueName(queueName)
                .build();

        GetQueueUrlResponse getQueueUrlResponse;
        try {
            getQueueUrlResponse = sqsClient.getQueueUrl(urlRequest);
        } catch (QueueDoesNotExistException e) {
            LOGGER.error(e.getMessage(), e);
            throw new RuntimeException(e);
        }
        String queueUrl = getQueueUrlResponse.queueUrl();


        Map<QueueAttributeName, String> attributes = Map.of(
                QueueAttributeName.KMS_MASTER_KEY_ID, kmsMasterKeyAlias,
                QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS, "140" // Set the data key reuse period to 140 seconds.
        );                                                                  // This is how long SQS can reuse the data key before requesting a new one from KMS.

        SetQueueAttributesRequest attRequest = SetQueueAttributesRequest.builder()
                .queueUrl(queueUrl)
                .attributes(attributes)
                .build();
        try {
            sqsClient.setQueueAttributes(attRequest);
            LOGGER.info("The attributes have been applied to {}", queueName);
        } catch (InvalidAttributeNameException | InvalidAttributeValueException e) {
            LOGGER.error(e.getMessage(), e);
            throw new RuntimeException(e);
        } finally {
            sqsClient.close();
        }
    }
```

## Désactivation du SSE pour une file d'attente
<a name="sqs-java-disable-sse"></a>

Pour désactiver le chiffrement côté serveur pour une file d'attente existante, définissez l'attribut `KmsMasterKeyId` sur une chaîne vide à l'aide de la méthode `SetQueueAttributes`.

**Important**  
`null` n'est pas une valeur valide pour `KmsMasterKeyId`.

## Création d'une file d'attente avec le SSE
<a name="sqs-java-configure-sse-create-queue"></a>

Pour activer le SSE lorsque vous créez la file d'attente, ajoutez l'attribut `KmsMasterKeyId` à la méthode d'API `[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`.

L'exemple suivant crée une file d'attente avec le SSE activé. La file d'attente utilise la clé KMS gérée par AWS pour Amazon SQS. L'exemple définit également la [période de réutilisation de la AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) sur 160 secondes.

 Avant d'exécuter l'exemple de code, assurez-vous d'avoir défini vos AWS informations d'identification. Pour plus d'informations, consultez la section [Configurer les AWS informations d'identification et la région pour le développement](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) dans le *guide du AWS SDK for Java 2.x développeur*. 

```
// Create an SqsClient for the specified Region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Create a hashmap for the attributes. Add the key alias and reuse period to the hashmap.
HashMap<QueueAttributeName, String> attributes = new HashMap<QueueAttributeName, String>();
final String kmsMasterKeyAlias = "alias/aws/sqs";  // the alias of the AWS managed KMS key for Amazon SQS.
attributes.put(QueueAttributeName.KMS_MASTER_KEY_ID, kmsMasterKeyAlias);
attributes.put(QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS, "140");				

// Add the attributes to the CreateQueueRequest.
CreateQueueRequest createQueueRequest =
                CreateQueueRequest.builder()
                        .queueName(queueName)
                        .attributes(attributes)
                        .build();
sqsClient.createQueue(createQueueRequest);
```

## Récupération des attributs SSE
<a name="sqs-java-get-sse-attributes"></a>

Pour plus d'informations sur la récupération des attributs de file d'attente, consultez les [Exemples](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html#API_GetQueueAttributes_Examples) de la *Référence d'API Amazon Simple Queue Service*.

Pour récupérer l'ID de la clé KMS ou la période de réutilisation de la clé de données pour une file d'attente particulière, exécutez la méthode `[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)` et récupérez les valeurs `KmsMasterKeyId` et `KmsDataKeyReusePeriodSeconds`.

# Configuration des balises pour une file d'attente Amazon SQS
<a name="sqs-java-add-update-remove-tag-queue"></a>

Utilisez des balises de répartition des coûts afin d'organiser et d'identifier vos files d'attente Amazon SQS. Les exemples suivants montrent comment configurer des balises à l'aide d' AWS SDK pour Java. Pour de plus amples informations, veuillez consulter [Balises de répartition des coûts Amazon SQS](sqs-queue-tags.md).

 Avant d'exécuter l'exemple de code, assurez-vous d'avoir défini vos AWS informations d'identification. Pour plus d'informations, consultez la section [Configurer les AWS informations d'identification et la région pour le développement](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) dans le *guide du AWS SDK for Java 2.x développeur*. 

## Établissement d'une liste de balises
<a name="sqs-java-list-tags"></a>

Pour répertorier les balises d'une file d'attente, utilisez la méthode `ListQueueTags`.

```
// Create an SqsClient for the specified region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Get the queue URL.
String queueName = "MyStandardQ1";
GetQueueUrlResponse getQueueUrlResponse =
        sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();

// Create the ListQueueTagsRequest.
final ListQueueTagsRequest listQueueTagsRequest = 
                                  ListQueueTagsRequest.builder().queueUrl(queueUrl).build();

// Retrieve the list of queue tags and print them.
final ListQueueTagsResponse listQueueTagsResponse =
                                  sqsClient.listQueueTags(listQueueTagsRequest);
System.out.println(String.format("ListQueueTags: \tTags for queue %s are %s.\n",
                queueName, listQueueTagsResponse.tags() ));
```

## Ajout ou mise à jour de balises
<a name="sqs-java-add-tags"></a>

Pour ajouter ou mettre à jour les valeurs de balise d'une file d'attente, utilisez la méthode `TagQueue`.

```
 // Create an SqsClient for the specified Region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Get the queue URL.
String queueName = "MyStandardQ1";
GetQueueUrlResponse getQueueUrlResponse =
        sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();	

// Build a hashmap of the tags.
final HashMap<String, String> addedTags = new HashMap<>();
        addedTags.put("Team", "Development");
        addedTags.put("Priority", "Beta");
        addedTags.put("Accounting ID", "456def");

//Create the TagQueueRequest and add them to the queue.
final TagQueueRequest tagQueueRequest = TagQueueRequest.builder()
        .queueUrl(queueUrl)
        .tags(addedTags)
        .build();
sqsClient.tagQueue(tagQueueRequest);
```

## Suppression de balises
<a name="sqs-java-remove-tags"></a>

Pour supprimer une ou plusieurs balises de la file d'attente, utilisez la méthode `UntagQueue`. L'exemple suivant supprime la balise `Accounting ID`.

```
 
// Create the UntagQueueRequest.
final UntagQueueRequest untagQueueRequest = UntagQueueRequest.builder()
        .queueUrl(queueUrl)
        .tagKeys("Accounting ID")
        .build();
        
// Remove the tag from this queue.
sqsClient.untagQueue(untagQueueRequest);
```

# Envoi d'attributs de message à une file d'attente Amazon SQS
<a name="sqs-java-send-message-with-attributes"></a>

Vous pouvez inclure des métadonnées structurées (telles que des horodatages, des données géospatiales, des signatures et des identifiants) dans des messages utilisant des *attributs de message*. Pour de plus amples informations, veuillez consulter [Attributs de message Amazon SQS](sqs-message-metadata.md#sqs-message-attributes).

 Avant d'exécuter l'exemple de code, assurez-vous d'avoir défini vos AWS informations d'identification. Pour plus d'informations, consultez la section [Configurer les AWS informations d'identification et la région pour le développement](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) dans le *guide du AWS SDK for Java 2.x développeur*. 

## Définition des attributs
<a name="sqs-java-define-attributes"></a>

Pour définir un attribut pour un message, ajoutez le code suivant qui utilise le type de données `[MessageAttributeValue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_MessageAttributeValue.html)`. Pour plus d'informations, consultez [Composants des attributs de message](sqs-message-metadata.md#message-attribute-components) et [Types de données d'attribut de message](sqs-message-metadata.md#message-attribute-data-types).

calcule AWS SDK pour Java automatiquement les sommes de contrôle du corps et des attributs du message et les compare aux données renvoyées par Amazon SQS. Pour plus d'informations, consultez le *[Guide du développeur AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/)* et [Calcul du résumé du MD5 message pour les attributs du message](sqs-message-metadata.md#sqs-attributes-md5-message-digest-calculation) pour les autres langages de programmation.

------
#### [ String ]

Cet exemple définit un attribut `String` nommé `Name` avec la valeur `Jane`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("Name", new MessageAttributeValue()
.withDataType("String")
.withStringValue("Jane"));
```

------
#### [ Number ]

Cet exemple définit un attribut `Number` nommé `AccurateWeight` avec la valeur `230.000000000000000001`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("AccurateWeight", new MessageAttributeValue()
.withDataType("Number")
.withStringValue("230.000000000000000001"));
```

------
#### [ Binary ]

Cet exemple définit un attribut `Binary` nommé `ByteArray` avec la valeur d'une matrice de 10 octets non initialisée.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("ByteArray", new MessageAttributeValue()
.withDataType("Binary")
.withBinaryValue(ByteBuffer.wrap(new byte[10])));
```

------
#### [ String (custom) ]

Cet exemple définit l'attribut personnalisé `String.EmployeeId` nommé `EmployeeId` avec la valeur `ABC123456`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("EmployeeId", new MessageAttributeValue()
.withDataType("String.EmployeeId")
.withStringValue("ABC123456"));
```

------
#### [ Number (custom) ]

Cet exemple définit l'attribut personnalisé `Number.AccountId` nommé `AccountId` avec la valeur `000123456`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("AccountId", new MessageAttributeValue()
.withDataType("Number.AccountId")
.withStringValue("000123456"));
```

**Note**  
Comme le type de données de base est `Number`, la méthode `[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)` renvoie `123456`.

------
#### [ Binary (custom) ]

Cet exemple définit l'attribut personnalisé `Binary.JPEG` nommé `ApplicationIcon` avec la valeur d'une matrice de 10 octets non initialisée.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("ApplicationIcon", new MessageAttributeValue()
.withDataType("Binary.JPEG")
.withBinaryValue(ByteBuffer.wrap(new byte[10])));
```

------

## Envoi d'un message avec des attributs
<a name="sqs-java-send-attributes"></a>

Cet exemple ajoute les attributs à `SendMessageRequest` avant d'envoyer le message.

```
// Send a message with an attribute.
final SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.withMessageBody("This is my message text.");
sendMessageRequest.withQueueUrl(myQueueUrl);
sendMessageRequest.withMessageAttributes(messageAttributes);
sqs.sendMessage(sendMessageRequest);
```

**Important**  
Si vous envoyez un message à une file d'attente First-In-First-Out (FIFO), assurez-vous que la `sendMessage` méthode s'exécute une *fois* que vous avez fourni l'ID du groupe de messages.  
Si vous utilisez la méthode `[SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)` au lieu de `[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)`, vous devez spécifier les attributs de message pour chaque message du lot.