2017-03-18 112 views
1

我想要将retreiving后的消息与aws fifo sqs区分开,以便路由到正确的处理器。我计划利用我在发送请求时设置的MessageGroupId。 我正在使用Java sdk。 sendMessageRequest.setMessageGroupId(messageGroupId);aws fifo队列无法接收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()); 
} 

只有当我设置任何属性明确那么retreivable(如与MESSAGEPRIORITY),但如何接收到类似MessageGroupId属性的值?

帮助表示赞赏。

+0

在receiveMessageRequest.withAttributeNames(“All”)之后使用message.getAttributes(),如下面的回复中所建议的。 – snijhi

回答

2

getAttributes()能够向您显示它们之前,您必须告诉SQS您希望它给您的属性。

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

请注意,SQS消息有两种不同的属性。 属性是系统生成的(如MessageGroupId),而消息属性是消息发送时包含的用户生成的自定义键/值对,但在消息主体本身外部传输。

+0

谢谢@迈克尔。作品。 – snijhi

+0

@snijhi太棒了!不要忘记勾选复选标记以表示答案已被“接受”。 –