Amazon SQS Java SDK: no puede recibir los atributos del mensaje
amazon-sqs (1)
Después de publicar un mensaje con un atributo en SQS con el siguiente código antes de enviarlo (y verificar en la consola de SQS para ver si todo está publicado correctamente) ...
messageRequest.addMessageAttributesEntry(
"attributeTest",
new MessageAttributeValue()
.withDataType("String")
.withStringValue("attributeTest 123"));
No puedo recuperar ninguno de los atributos del mensaje en el mensaje. Todo lo que veo, como resultado, es "0 atributos". La reinspección del mensaje en la consola de Amazon SQS, el mensaje y el atributo siguen allí.
// Message was previously checked in SQS console and contains
// an attribute named "attributeTest"
AmazonSQS sqs = ...
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message : messages)
{
Map<String, MessageAttributeValue> attributes = message.getMessageAttributes();
System.out.println("" + attributes.size() + " attributes.");
}
Estoy utilizando Amazon SQS SDK v1.8 en Java 1.7 con Play Framework 2.2.3. Al principio pensé que podría ser la versión SQS, pero intenté actualizar a 1.8.7 sin ningún resultado.
La documentación oficial que se encuentra here no proporciona ningún código fuente para leer los atributos en absoluto. Ni búsquedas de github, desbordamiento de pila. Lo he intentado durante unas horas sin ningún éxito.
¡Gracias por cualquier ayuda!
Debe especificar qué atributos de mensaje desea en su solicitud (o usar "Todos" para obtener todos los atributos de mensaje). Así que en tu caso podrías usar cualquiera
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("attributeTest")).getMessages();
o
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();
Si desea los atributos estándar (ApproximateFirstReceiveTimestamp, ApproximateReceiveCount, SenderId y SentTimestamp) junto con sus mensajes, use withAttributeNames("All")
. Puede encontrar más detalles en los Javadocs para ReceiveMessageRequest .