是的,您需要另一个(外部)循环来继续以10个为一批获取消息,直到没有消息留下。您不需要知道队列大小,只需使用while循环并迭代,直到得到没有消息的响应。
像这样:
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);
receiveMessageRequest.withMaxNumberOfMessages(10);
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
while (messages.size() > 0) {
for (final Message message : messages) {
System.out.println("Message");
System.out.println(" MessageId: " + message.getMessageId());
System.out.println(" ReceiptHandle: " + message.getReceiptHandle());
System.out.println(" MD5OfBody: " + message.getMD5OfBody());
System.out.println(" Body: " + message.getBody());
for (final Entry<String, String> entry : message.getAttributes().entrySet()) {
System.out.println("Attribute");
System.out.println(" Name: " + entry.getKey());
System.out.println(" Value: " + entry.getValue());
}
}
receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);
receiveMessageRequest.withMaxNumberOfMessages(10);
messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
}
如果您确实需要获取仍在队列中的消息数,可以在AWS SDK中查询queue属性
ApproximateNumberOfMessages
GetQueueAttributesResult attrResult = sqs.getQueueAttributes(queueUrl, ["ApproximateNumberOfMessages"]);
System.out.println("Messages in queue: " + attrResult.getAttributes()["ApproximateNumberOfMessages"]);