【问题标题】:List<Message> contains only one Message though I pass manyList<Message> 只包含一个 Message 虽然我传递了很多
【发布时间】:2013-05-05 21:46:55
【问题描述】:

当我向我的 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&lt;messages&gt; 中的所有 3 条消息?

【问题讨论】:

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


    【解决方案1】:

    您需要在请求中设置maxNumberOfMessages

    试试

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

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

    编辑
    实际上,我刚刚看到了这个question,我认为您不会一次收到所有消息。您将需要多次调用该方法。

    【讨论】:

      【解决方案2】:

      我们将等待超时设置为 20 并获得倍数。在你把它们全部弄完之前,你可能已经没有时间了。

      【讨论】:

        【解决方案3】:

        阅读后删除邮件将允许您访问队列中的其他邮件。所以你必须打多个电话才能查看所有消息...

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-10
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多