【问题标题】:aws fifo queue cannot receive messageGroupIDaws fifo 队列无法接收 messageGroupID
【发布时间】:2017-03-19 07:36:52
【问题描述】:

我想在从 aws 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 等属性的值?

感谢您的帮助。

【问题讨论】:

  • 在 receiveMessageRequest.withAttributeNames("All") 之后与 message.getAttributes() 一起使用,如下面的回复中所建议的那样。

标签: amazon-web-services fifo


【解决方案1】:

您必须告诉 SQS 您希望它为您提供哪些属性,然后getAttributes() 才能向您显示它们。

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

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

【讨论】:

  • 非常感谢@Michael。工作。
  • @snijhi 太棒了!不要忘记勾选复选标记以表示答案已“接受”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多