

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à.

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

Ti AWS SDK per Java consente di creare applicazioni Java che interagiscono con Amazon SQS e altri. Servizi AWS
+ Per installare e configurare l'SDK, consulta la [Guida introduttiva](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getting-started.html) nella *Guida dello sviluppatore di AWS SDK for Java 2.x *.
+ *Per le operazioni di coda di base, come la creazione di una coda o l'invio di un messaggio, consulta [Working with Amazon SQS](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/sqs-examples.html) Message Queues nella Developer Guide.AWS SDK for Java 2.x *
+ Questa guida include anche esempi di funzionalità aggiuntive di Amazon SQS, come:
  + [Utilizzo della crittografia lato server con le code Amazon SQS](sqs-java-configure-sse.md)
  + [Configurazione dei tag per una coda Amazon SQS](sqs-java-add-update-remove-tag-queue.md)
  + [Invio degli attributi dei messaggi a una coda Amazon SQS](sqs-java-send-message-with-attributes.md)

# Utilizzo della crittografia lato server con le code Amazon SQS
<a name="sqs-java-configure-sse"></a>

Utilizza AWS SDK per Java per aggiungere la crittografia lato server (SSE) a una coda Amazon SQS. Ogni coda utilizza una chiave AWS Key Management Service (AWS KMS) KMS per generare le chiavi di crittografia dei dati. Questo esempio utilizza la chiave KMS gestita da AWS per Amazon SQS.

Per ulteriori informazioni su come utilizzare la chiave KMS predefinita, consulta [Crittografia inattiva in Amazon SQS](sqs-server-side-encryption.md). 

## Aggiunta di SSE a una coda esistente
<a name="sqs-java-configure-sse-existing-queue"></a>

Per abilitare la crittografia lato server per una coda esistente, utilizza il metodo `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` per impostare l'attributo `KmsMasterKeyId`.

Il seguente esempio di codice imposta AWS KMS key come chiave KMS AWS gestita per Amazon SQS. L'esempio imposta inoltre il [periodo di riutilizzo di AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) su 140 secondi.

 Prima di eseguire il codice di esempio, assicurati di aver impostato le AWS credenziali. Per ulteriori informazioni, consulta [Configurare AWS le credenziali e la regione per lo sviluppo nella Guida per](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) gli *AWS SDK for Java 2.x sviluppatori*. 

```
    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();
        }
    }
```

## Disabilitazione di SSE per una coda
<a name="sqs-java-disable-sse"></a>

Per disabilitare la crittografia lato server per una coda esistente, imposta l'attributo `KmsMasterKeyId` su una stringa vuota tramite l'operazione `SetQueueAttributes`.

**Importante**  
`null` non è un valore valido per `KmsMasterKeyId`.

## Creazione di una coda con SSE
<a name="sqs-java-configure-sse-create-queue"></a>

Per abilitare SSE quando crei la coda, aggiungi l'attributo `KmsMasterKeyId` al metodo API `[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`.

L'esempio seguente spiega come creare una coda con SSE abilitato. La coda utilizza la chiave KMS gestita da AWS per Amazon SQS. L'esempio imposta inoltre il [periodo di riutilizzo di AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) su 160 secondi.

 Prima di eseguire il codice di esempio, assicurati di aver impostato le AWS credenziali. Per ulteriori informazioni, consulta [Configurare AWS le credenziali e la regione per lo sviluppo nella Guida per](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) gli *AWS SDK for Java 2.x sviluppatori*. 

```
// 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);
```

## Recupero degli attributi SSE
<a name="sqs-java-get-sse-attributes"></a>

Per informazioni sul recupero degli attributi di coda, consulta [Examples](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html#API_GetQueueAttributes_Examples) nella *Documentazione di riferimento delle API di Amazon Simple Queue Service*.

Per recuperare l'ID della chiave KMS o il periodo di riutilizzo della chiave dati per una particolare coda, esegui il metodo `[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)` e recupera i valori `KmsMasterKeyId` e `KmsDataKeyReusePeriodSeconds`.

# Configurazione dei tag per una coda Amazon SQS
<a name="sqs-java-add-update-remove-tag-queue"></a>

Puoi aggiungere i tag di allocazione dei costi alle tue code Amazon SQS per organizzarle e identificarle più facilmente. Gli esempi seguenti mostrano come gestire i tag con AWS SDK per Java. Per ulteriori informazioni, consulta [Tag per l'allocazione dei costi Amazon SQS](sqs-queue-tags.md).

 Prima di eseguire il codice di esempio, assicurati di aver impostato le AWS credenziali. Per ulteriori informazioni, consulta [Configurare AWS le credenziali e la regione per lo sviluppo nella Guida per](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) gli *AWS SDK for Java 2.x sviluppatori*. 

## Come elencare i tag
<a name="sqs-java-list-tags"></a>

Per elencare i tag di una coda, utilizza il metodo `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() ));
```

## Aggiunta o aggiornamento dei tag
<a name="sqs-java-add-tags"></a>

Per aggiungere o aggiornare i valori dei tag per una coda, utilizza il metodo `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);
```

## Rimozione dei tag
<a name="sqs-java-remove-tags"></a>

Per rimuovere uno o più tag dalla coda, utilizza il metodo `UntagQueue`. L'esempio seguente rimuove il tag `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);
```

# Invio degli attributi dei messaggi a una coda Amazon SQS
<a name="sqs-java-send-message-with-attributes"></a>

Puoi includere metadati strutturati (come time stamp, dati geospaziali, firme e identificatori) con i messaggi tramite gli *attributi dei messaggi*. Per ulteriori informazioni, consulta [Attributi messaggio di Amazon SQS](sqs-message-metadata.md#sqs-message-attributes).

 Prima di eseguire il codice di esempio, assicurati di aver impostato le AWS credenziali. Per ulteriori informazioni, consulta [Configurare AWS le credenziali e la regione per lo sviluppo nella Guida per](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) gli *AWS SDK for Java 2.x sviluppatori*. 

## Definizione degli attributi
<a name="sqs-java-define-attributes"></a>

Per definire un attributo per un messaggio, aggiungi il codice seguente che utilizza il tipo di dati `[MessageAttributeValue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_MessageAttributeValue.html)`. Per ulteriori informazioni, consultare [Componenti attributo del messaggio](sqs-message-metadata.md#message-attribute-components) e [Tipi di dati degli attributi di messaggio](sqs-message-metadata.md#message-attribute-data-types).

Calcola AWS SDK per Java automaticamente i checksum del corpo del messaggio e degli attributi del messaggio e li confronta con i dati restituiti da Amazon SQS. Per ulteriori informazioni, consulta la *[Guida per gli sviluppatori AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/)* e [Calcolo del digest dei MD5 messaggi per gli attributi dei messaggi](sqs-message-metadata.md#sqs-attributes-md5-message-digest-calculation) per altri linguaggi di programmazione.

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

Questo esempio definisce un attributo `String` denominato `Name` con il valore `Jane`.

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

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

Questo esempio definisce un attributo `Number` denominato `AccurateWeight` con il valore `230.000000000000000001`.

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

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

Questo esempio definisce un attributo `Binary` denominato `ByteArray` con il valore di un array non inizializzato di 10 byte.

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

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

Questo esempio definisce l'attributo personalizzato `String.EmployeeId` denominato `EmployeeId` con il valore `ABC123456`.

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

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

Questo esempio definisce l'attributo personalizzato `Number.AccountId` denominato `AccountId` con il valore `000123456`.

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

**Nota**  
Poiché il tipo di dati di base è `Number`, il metodo `[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)` restituisce `123456`.

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

Questo esempio definisce l'attributo personalizzato `Binary.JPEG` denominato `ApplicationIcon` con il valore di un array non inizializzato di 10 byte.

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

------

## Invio di un messaggio con attributi
<a name="sqs-java-send-attributes"></a>

Questo esempio aggiunge gli attributi a `SendMessageRequest` prima dell'invio del messaggio.

```
// 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);
```

**Importante**  
Se invii un messaggio a una coda First-In-First-Out (FIFO), assicurati che il `sendMessage` metodo venga eseguito *dopo aver* fornito l'ID del gruppo di messaggi.  
Se utilizzi l'operazione `[SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)` invece di `[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)`, devi specificare gli attributi per ogni singolo messaggio presente nel batch.