

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

El AWS SDK para Java le permite crear aplicaciones Java que interactúan con Amazon SQS y otros Servicios de AWS.
+ Para instalar y configurar el SDK, consulte [Introducción](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getting-started.html) en la *Guía para desarrolladores de AWS SDK for Java 2.x*.
+ Para ver operaciones básicas con colas, como la creación de una cola o el envío de un mensaje, consulte [Uso de colas de mensajes de Amazon SQS](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/sqs-examples.html) en la *Guía para desarrolladores de AWS SDK for Java 2.x*.
+ Esta guía también incluye ejemplos de características adicionales de Amazon SQS, como:
  + [Uso del cifrado del servidor con colas de Amazon SQS](sqs-java-configure-sse.md)
  + [Configuración de etiquetas para una cola de Amazon SQS](sqs-java-add-update-remove-tag-queue.md)
  + [Envío de un mensaje con atributos a una cola de Amazon SQS](sqs-java-send-message-with-attributes.md)

# Uso del cifrado del servidor con colas de Amazon SQS
<a name="sqs-java-configure-sse"></a>

Úselo AWS SDK para Java para añadir el cifrado del lado del servidor (SSE) a una cola de Amazon SQS. Cada cola utiliza una clave KMS de AWS Key Management Service (AWS KMS) para generar las claves de cifrado de datos. Este ejemplo utiliza la clave de KMS administrada por AWS para Amazon SQS.

Para obtener más información sobre cómo utilizar SSE y el rol de la clave de KMS, consulte [Cifrado en reposo en Amazon SQS](sqs-server-side-encryption.md). 

## Agregar SSE a una cola existente
<a name="sqs-java-configure-sse-existing-queue"></a>

Para activar el cifrado del servidor en una cola existente, utilice el método `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` para establecer el atributo `KmsMasterKeyId`.

El siguiente ejemplo de código establece la AWS KMS key clave de KMS AWS administrada para Amazon SQS. En el ejemplo también se establece el [periodo de reutilización de AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) a 140 segundos.

 Antes de ejecutar el código de ejemplo, asegúrese de haber establecido sus AWS credenciales. Para obtener más información, consulte [Configurar AWS las credenciales y la región para el desarrollo](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) en la *Guía para AWS SDK for Java 2.x desarrolladores*. 

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

## Desactivación de SSE para una cola
<a name="sqs-java-disable-sse"></a>

Para desactivar el cifrado del servidor para una cola existente, establezca el atributo `KmsMasterKeyId` a una cadena vacía mediante el método `SetQueueAttributes`.

**importante**  
`null` no es un valor válido para `KmsMasterKeyId`.

## Creación de una cola con SSE
<a name="sqs-java-configure-sse-create-queue"></a>

Para activar SSE al crear la cola, agregue el atributo `KmsMasterKeyId` al método de la API `[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`.

En el siguiente ejemplo se crea una nueva cola con SSE activado. La cola utiliza la clave de KMS administrada por AWS para Amazon SQS. En el ejemplo también se establece el [periodo de reutilización de AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) a 160 segundos.

 Antes de ejecutar el código de ejemplo, asegúrese de haber establecido sus AWS credenciales. Para obtener más información, consulte [Configurar AWS las credenciales y la región para el desarrollo](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) en la *Guía para AWS SDK for Java 2.x desarrolladores*. 

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

## Recuperación de atributos de SSE
<a name="sqs-java-get-sse-attributes"></a>

Para obtener información sobre la recuperación de atributos de cola, consulte [Ejemplos](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html#API_GetQueueAttributes_Examples) en la *Referencia de la API de Amazon Simple Queue Service*.

Para recuperar el ID de la clave de KMS o el periodo de reutilización de la clave de datos para una cola en concreto, ejecute el método `[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)` y recupere los valores `KmsMasterKeyId` y `KmsDataKeyReusePeriodSeconds`.

# Configuración de etiquetas para una cola de Amazon SQS
<a name="sqs-java-add-update-remove-tag-queue"></a>

Utilice etiquetas de asignación de costos para organizar e identificar sus colas de Amazon SQS. En los siguientes ejemplos se muestra cómo configurar etiquetas mediante la función AWS SDK para Java. Para obtener más información, consulte [Etiquetas de asignación de costos de Amazon SQS](sqs-queue-tags.md).

 Antes de ejecutar el código de ejemplo, asegúrese de haber establecido sus AWS credenciales. Para obtener más información, consulte [Configurar AWS las credenciales y la región para el desarrollo](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) en la *Guía para AWS SDK for Java 2.x desarrolladores*. 

## Enumeración de etiquetas
<a name="sqs-java-list-tags"></a>

Para obtener una lista de las etiquetas de una cola, utilice el método `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() ));
```

## Adición o actualización de etiquetas
<a name="sqs-java-add-tags"></a>

Para agregar o actualizar valores de etiqueta para una cola, utilice el método `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);
```

## Eliminación de etiquetas
<a name="sqs-java-remove-tags"></a>

Para eliminar una o varias etiquetas de la cola, utilice el método `UntagQueue`. En el siguiente ejemplo se elimina la etiqueta `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);
```

# Envío de un mensaje con atributos a una cola de Amazon SQS
<a name="sqs-java-send-message-with-attributes"></a>

Puede incluir metadatos estructurados (como marcas temporales, datos geoespaciales, firmas e identificadores) con los mensajes mediante *atributos de mensaje*. Para obtener más información, consulte [Atributos de mensajes de Amazon SQS](sqs-message-metadata.md#sqs-message-attributes).

 Antes de ejecutar el código de ejemplo, asegúrese de haber establecido sus AWS credenciales. Para obtener más información, consulte [Configurar AWS las credenciales y la región para el desarrollo](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) en la *Guía para AWS SDK for Java 2.x desarrolladores*. 

## Definición de atributos
<a name="sqs-java-define-attributes"></a>

Para definir un atributo para un mensaje, agregue el siguiente código, que utiliza el tipo de datos `[MessageAttributeValue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_MessageAttributeValue.html)`. Para obtener más información, consulte [Componentes de atributos de mensajes](sqs-message-metadata.md#message-attribute-components) y [Tipos de datos de atributos de mensajes](sqs-message-metadata.md#message-attribute-data-types).

Calcula AWS SDK para Java automáticamente las sumas de comprobación del cuerpo y los atributos del mensaje y las compara con los datos que devuelve Amazon SQS. Para obtener más información, consulte la *[Guía para desarrolladores de AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/)* y [Calcular el resumen del MD5 mensaje para los atributos del mensaje](sqs-message-metadata.md#sqs-attributes-md5-message-digest-calculation) para otros lenguajes de programación.

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

En este ejemplo se define un atributo `String` denominado `Name` con el valor `Jane`.

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

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

En este ejemplo se define un atributo `Number` denominado `AccurateWeight` con el valor `230.000000000000000001`.

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

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

En este ejemplo se define un atributo `Binary` denominado `ByteArray` con el valor de una matriz de 10 bytes sin inicializar.

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

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

En este ejemplo se define el atributo personalizado `String.EmployeeId` denominado `EmployeeId` con el valor `ABC123456`.

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

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

En este ejemplo se define el atributo personalizado `Number.AccountId` denominado `AccountId` con el valor `000123456`.

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

**nota**  
Dado que el tipo de datos base es `Number`, el método `[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)` devuelve `123456`.

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

En este ejemplo se define el atributo personalizado `Binary.JPEG` denominado `ApplicationIcon` con el valor de una matriz de 10 bytes sin inicializar.

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

------

## Envío de un mensaje con atributos
<a name="sqs-java-send-attributes"></a>

En este ejemplo se agregan los atributos a `SendMessageRequest` antes de enviar el mensaje.

```
// 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**  
Si envía un mensaje a una cola First-In-First-Out (FIFO), asegúrese de que el `sendMessage` método se ejecute *después* de proporcionar el ID del grupo de mensajes.  
Si utiliza el método `[SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)` en lugar de `[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)`, debe especificar los atributos de los mensajes del lote.