我希望将从rets fifo sqs中检索后的消息与路由到正确的处理器区分开来。我计划使用我在发送请求时设置的 MessageGroupId 。 我正在使用Java sdk。 sendMessageRequest.setMessageGroupId(messageGroupId);
Documentation表示可以将其作为AttributeName
的请求参数进行检索MessageGroupId - 返回调用SendMessage操作的发件人提供的值。具有相同MessageGroupId的消息将按顺序返回。 但是,我找不到正确的方法/方法。没有属性 MessageGroupId 现在且大小为0.
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages)
{
System.out.println(" Size getAttributes: " + message.getAttributes() .size());
}
只有我明确设置了任何属性,然后才能进行转换(如 和MESSAGEPRIORITY),但是如何接收MessageGroupId这样的属性值?
非常感谢帮助。
答案 0 :(得分:2)
在getAttributes()
能够向您显示之前,您必须告诉SQS您希望它提供哪些属性。
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withAttributeNames("All")).getMessages();
请注意,SQS消息有两种不同的属性。 属性是系统生成的(如MessageGroupId
),而消息属性是用户生成的,当消息发送但外部传输时包含自定义键/值对消息体本身。