列表<message>只包含一条消息,但我传递了许多</message>

时间:2013-05-05 21:46:56

标签: java amazon-web-services message amazon-sqs

当我向SQS发送多条消息并将其读取为

//将消息发送到队列

    SendMessageRequest smr = new SendMessageRequest(queueUrl, "one");
    sqs.sendMessage(smr);
    smr = new SendMessageRequest(queueUrl, "two");
    sqs.sendMessage(smr);
    smr = new SendMessageRequest(queueUrl, "three");
    sqs.sendMessage(smr);
    Thread.sleep(5000);

//阅读队列

ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();

我的列表中只有一条消息。

当我第二次重复“阅读队列”时,我收到了第二条消息,当我第三次重复时,我得到了第三条消息。从队列中检索的消息是随机顺序的。但为什么我没有收到List<messages>中的所有3条消息?

3 个答案:

答案 0 :(得分:1)

您需要在请求中设置maxNumberOfMessages

尝试

ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl)
          .withMaxNumberOfMessages(3);

看看你是否得到了所有这些。

修改
其实我刚看到这个question,我想你不会一次收到你的消息。您需要多次调用该方法。

答案 1 :(得分:0)

我们将等待超时设置为20并获得倍数。在你得到所有这些之前,你可能已经没时间了。

答案 2 :(得分:0)

阅读后删除消息将使您可以访问队列中的其他消息。因此您必须打多个电话才能查看所有消息...

这对我有用:sqs.deleteMessage(SQSQueueURL, message.getReceiptHandle());