Amazon SQS Java SDK-无法接收消息属性
在使用以下代码将具有属性的消息发布到SQS之后,再发送它(并在SQS控制台中检查是否所有内容都已正确发布) 我无法检索消息中的任何消息属性。结果,我看到的只是“0个属性”。在AmazonSQS控制台中重新检查消息时,消息和属性仍然存在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
// 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();