Amazon SQS Java 开发工具包 - 无法接收消息属性

2022-09-01 10:22:28

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

感谢您的任何帮助!


答案 1

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

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

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

如果需要标准属性(ApproximateFirstReceiveTimestamp、ApproximateReceiveCount、SenderId 和 SentTimestamp)以及邮件,请使用 。您可以在 Javadocs for ReceiveMessageRequest 中找到更多详细信息。withAttributeNames("All")


答案 2

推荐