当前位置: 首页 > 面试题库 >

从SQS检索多条消息

丌官瀚
2023-03-14
问题内容

我在SQS中有多个消息。即使有数十个可见代码(不在运行中),以下代码也 始终 仅返回一个。
我认为setMaxNumberOfMessages允许一次使用多个..我误解了吗?

 CreateQueueRequest createQueueRequest = new CreateQueueRequest().withQueueName(queueName);
 String queueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();
 ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
 receiveMessageRequest.setMaxNumberOfMessages(10);
 List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
 for (Message message : messages) {
      // i'm a message from SQS
 }

我也尝试使用withMaxNumberOfMessages,但没有任何运气:

 receiveMessageRequest.withMaxNumberOfMessages(10);

我怎么知道队列中有消息?大于1?

 Set<String> attrs = new HashSet<String>();
 attrs.add("ApproximateNumberOfMessages");
 CreateQueueRequest createQueueRequest = new CreateQueueRequest().withQueueName(queueName);
 GetQueueAttributesRequest a = new GetQueueAttributesRequest().withQueueUrl(sqs.createQueue(createQueueRequest).getQueueUrl()).withAttributeNames(attrs);
 Map<String,String> result = sqs.getQueueAttributes(a).getAttributes();
 int num = Integer.parseInt(result.get("ApproximateNumberOfMessages"));

上面的代码总是在运行之前给我int> 1

感谢您的输入


问题答案:

AWS API参考指南:Query /
QueryReceiveMessage

由于队列的分布式性质,将在ReceiveMessage调用中对一组加权随机计算机进行采样。这意味着仅返回被采样计算机上的消息。如果队列中的消息数量很少(少于1000条),则收到的消息可能会少于每个ReceiveMessage调用所请求的消息。如果队列中的消息数量非常少,则您在特定的ReceiveMessage响应中可能不会收到任何消息;在这种情况下,您应该重复请求。

MaxNumberOfMessages :要返回的最大消息数。SQS永远不会返回比该值更多的消息,但 可能会返回更少的消息



 类似资料:
  • 我已经使用手动触发器创建了一个azure服务总线和一个新的逻辑应用程序。然后,我将“从队列获取消息(peek lock)”操作添加到应用程序中,并将最大消息数设置为“20”。 然后我在我的队列中手动创建5条新消息,然后触发我的新逻辑应用程序。然后,当我查看应用程序的执行情况时,我只看到检索到一条消息(并检查,有4条消息仍在我的队列中)。 似乎“20”的计数没有得到尊重。我还检查了我的服务总线队列的

  • 问题内容: 这很难解释,但我会尽力而为。 我有2个具有多对多关系的桌子;有一个定义关系的链接表。这些表分别命名为Question,QuestionTopic和Topic。主题具有字段TopicID和TopicName.Question具有字段QuestionID和QuestionText。 我想检索主题列表以及属于该主题的问题数量。但是,可以将主题归为一组,并且应该知道该组合所独有的问题数。举个例

  • 我有一个连接到lambda的队列(fifo)。我想在lambda中向标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作。 我查过: lambda有权发送SQS消息(您可以在那里看到) 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因此正确配置了标准队列 SQS URL是否正确 控制台中不会显示任何错

  • 我试图实现一对一聊天使用firebase实时数据库,我插入消息与senderid,Recieverid,消息,日期,sendername,Recievername,在我的情况下,不同的用户是不同的聊天室,我需要展示这个聊天室一对一聊天室我如何实现在我的android应用程序 下面是我检索数据的代码 但这段代码从聊天室获取所有数据,但我需要排除发送者名和接收者名相等的消息,sendername是从应

  • 运行在各种环境/设备上的代理将定期从公共网络中丢弃消息。这些消息将由我的AWS lambda处理。系统是异步的。 我正在考虑使用SQS来喂养lambda。正是这样,SQSendpoint将对Internet开放。如何验证AWS SQS上发布的消息。 大多数推送消息的设备/代理将位于客户VPN上。因此,建立私有VPN链路是一种可能的解决方案。

  • 我的Sring引导应用程序监听Amazon SQS队列。现在,我需要实现正确的消息确认--我需要接收一条消息,做一些业务逻辑,只有在此之后,如果成功,我需要ack消息(从队列中删除消息)。例如,如果我的业务逻辑出现错误,消息必须重新排队。 现在我不知道如何从我的听众那里获取信息。