SQS是否使用以下代码返回所有消息?

时间:2018-09-20 19:44:17

标签: amazon-web-services amazon-sqs

我试图了解以下代码的行为:

    // receive messages from the queue
    List<Message> messages = sqs.receiveMessage(queueUrl).getMessages();

    // delete messages from the queue
    for (Message m : messages) {
        sqs.deleteMessage(queueUrl, m.getReceiptHandle());
    }
  1. 它将返回队列中的所有消息吗?
  2. 如果没有,如何遍历队列中的所有消息?

2 个答案:

答案 0 :(得分:2)

不是,receiveMessage请求最多返回10条消息。

答案 1 :(得分:1)

1-不,正如Mark所说的,它最多只会返回10条消息。

2-您有两个选择:

第一: 每隔1分钟发送一次请求(例如),并将消息放入队列中,进行处理并删除。因此,您的函数会在几分钟后检索所有这些变量。

第二: 使用AWS Lambda函数来处理您的队列。 有关更多信息,请阅读以下文档: https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

如果您要处理大量消息,则由于性能和成本,第二种方法更好。 (AWS根据对SQS的总请求向您收费,因此在第一种方法中,如果队列中没有任何消息,则您的应用每隔一分钟发送一次请求,而不会返回任何消息)