Envío de un mensaje con atributos a una cola de Amazon SQS
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.
Antes de ejecutar el código de ejemplo, asegúrese de haber establecido las credenciales de AWS. Para obtener más información, consulte Configurar las credenciales y la región de AWS para el desarrollo en la Guía para desarrolladores de AWS SDK for Java 2.x.
Definición de atributos
Para definir un atributo para un mensaje, agregue el siguiente código, que utiliza el tipo de datos MessageAttributeValue. Para obtener más información, consulte Componentes de atributos de mensajes y Tipos de datos de atributos de mensajes.
AWS SDK para Java calcula automáticamente las sumas de comprobación del cuerpo del mensaje y de 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 y Cálculo del resumen del mensaje MD5 para atributos de mensajes 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"));
Dado que el tipo de datos base es Number, el método ReceiveMessage 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
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);
Si envía un mensaje a una cola FIFO (primero en entrar, primero en salir), asegúrese de que el método sendMessage se ejecuta después de proporcionar el ID del grupo de mensajes.
Si utiliza el método SendMessageBatch en lugar de SendMessage, debe especificar los atributos de los mensajes del lote.