【问题标题】:Amazon SQS Java SDK - cannot receive message attributesAmazon SQS Java SDK - 无法接收消息属性
【发布时间】:2014-09-26 06:33:13
【问题描述】:

在发送消息之前使用以下代码向 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 搜索,堆栈溢出。我已经尝试了几个小时没有任何成功。

感谢您的帮助!

【问题讨论】:

    标签: java amazon-sqs


    【解决方案1】:

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

    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 中找到更多详细信息。

    【讨论】:

    • 也为我工作,一旦我注意到“.withAttributeNames()”和“.withMessageAttributeNames()”之间的区别。这里需要注意细节。哇!
    • 很好的答案,但我仍然不知道如何接收自定义标题:(
    猜你喜欢
    • 2014-11-10
    • 2014-06-27
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多