

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.

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