在发送带有以下代码的SQS属性的消息之后(并在SQS控制台中检查是否所有内容都正确发布)...
messageRequest.addMessageAttributesEntry(
"attributeTest",
new MessageAttributeValue()
.withDataType("String")
.withStringValue("attributeTest 123"));
我无法检索邮件中的任何邮件属性。因此,我所看到的只是" 0属性。"。在Amazon SQS控制台中重新检查消息,消息 - 和属性 - 仍在那里。
// 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.");
}
我在Java 1.7中使用Amazon SQS SDK v1.8和Play Framework 2.2.3。起初我以为它可能是SQS版本,但尝试升级到1.8.7但没有用。
发现的官方文档here根本没有提供任何源代码来读取属性。也没有github搜索,堆栈溢出。我已经尝试了几个小时而没有任何成功。
感谢您的帮助!
答案 0 :(得分:40)
您必须在请求中指定所需的消息属性(或使用&#34; All&#34;来获取所有消息属性)。所以在你的情况下你可以使用
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("attributeTest")).getMessages();
或
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();
如果您想要标准属性(ApproximateFirstReceiveTimestamp,ApproximateReceiveCount,SenderId和SentTimestamp)以及消息,请使用withAttributeNames("All")
。您可以在ReceiveMessageRequest的Javadocs中找到更多详细信息。