[英]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.