簡體   English   中英

Amazon SQS Java SDK - 無法接收消息屬性

[英]Amazon SQS Java SDK - cannot receive message attributes

在發送帶有以下代碼的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但無濟於事。

這里找到的官方文檔根本沒有提供任何源代碼來讀取屬性。 也沒有github搜索,堆棧溢出。 我已經嘗試了幾個小時而沒有任何成功。

謝謝你的幫助!

您必須在請求中指定所需的消息屬性(或使用“全部”獲取所有消息屬性)。 所以在你的情況下你可以使用其中之一

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

要么

List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();

如果您需要標准屬性(ApproximateFirstReceiveTimestamp,ApproximateReceiveCount,SenderId和SentTimestamp)以及消息,請使用withAttributeNames("All") 您可以在Javadocs中找到有關ReceiveMessageRequest的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM