Amazon SQS Java SDK-无法接收消息属性

Amazon SQS Java SDK-无法接收消息属性,java,amazon-sqs,Java,Amazon Sqs,在使用以下代码将具有属性的消息发布到SQS之后,再发送它(并在SQS控制台中检查是否所有内容都已正确发布) 我无法检索消息中的任何消息属性。结果,我看到的只是“0个属性”。在AmazonSQS控制台中重新检查消息时,消息和属性仍然存在 // Message was previously checked in SQS console and contains // an attribute named "attributeTest" AmazonSQS sqs = ... List<Me

在使用以下代码将具有属性的消息发布到SQS之后,再发送它(并在SQS控制台中检查是否所有内容都已正确发布)

我无法检索消息中的任何消息属性。结果,我看到的只是“0个属性”。在AmazonSQS控制台中重新检查消息时,消息和属性仍然存在

// 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.");
}
//消息先前已在SQS控制台中检查并包含
//名为“attributeTest”的属性
AmazonSQS sqs=。。。
List messages=sqs.receiveMessage(receiveMessageRequest.getMessages();
用于(消息:消息)
{
映射属性=message.getMessageAttributes();
System.out.println(“+attributes.size()+attributes”);
}
我正在使用Java1.7中的AmazonSQSSDKV1.8和PlayFramework2.2.3。起初我认为它可能是SQS版本,但尝试升级到1.8.7,但没有成功

找到的官方文档根本没有提供任何源代码来读取属性。也没有github搜索,堆栈溢出。我试了几个小时都没有成功


谢谢你的帮助

您必须在请求中指定所需的消息属性(或使用“全部”获取所有消息属性)。所以在你的情况下,你可以使用

List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("attributeTest")).getMessages();
List messages=sqs.receiveMessage(receiveMessageRequest.WithMessageAttributeName(“attributeTest”)).getMessages();

List messages=sqs.receiveMessage(receiveMessageRequest.WithMessageAttributeName(“全部”)).getMessages();

如果要将标准属性(ApproximateFirstReceiveTimestamp、ApproximateReceiveCount、SenderId和SentTimestamp)与消息一起使用,请使用
和AttributeName(“全部”)
。您可以在的Javadocs中找到更多详细信息

当我注意到“.withAttributeNames()”和“.withMessageAttributeNames()”之间的区别时,这也对我有用。这里需要注意细节。啊!回答得很好,但我仍然不知道如何接收自定义标题:(
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("attributeTest")).getMessages();
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();