Да, вам понадобится другой (внешний) цикл, чтобы продолжать получать сообщения партиями по 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 атрибут очереди ApproximateNumberOfMessages
.как:
GetQueueAttributesResult attrResult = sqs.getQueueAttributes(queueUrl, ["ApproximateNumberOfMessages"]);
System.out.println("Messages in queue: " + attrResult.getAttributes()["ApproximateNumberOfMessages"]);