in src/main/java/com/amazonaws/services/sqs/AmazonSQSIdleQueueDeletingClient.java [364:387]
public ReceiveMessageResult receiveMessage(ReceiveMessageRequest request) {
// Here we have to also fetch from the backup queue if we created it.
String queueUrl = request.getQueueUrl();
String alternateQueueUrl = alternateQueueName(queueUrl);
QueueMetadata alternateMetadata = queues.get(alternateQueueUrl);
if (alternateMetadata != null) {
ReceiveQueueBuffer buffer = alternateMetadata.buffer;
ReceiveMessageRequest alternateRequest = request.clone().withQueueUrl(alternateQueueUrl);
buffer.submit(executor, () -> receiveIgnoringNonExistantQueue(request),
queueUrl, request.getVisibilityTimeout());
buffer.submit(executor, () -> receiveIgnoringNonExistantQueue(alternateRequest),
queueUrl, request.getVisibilityTimeout());
Future<ReceiveMessageResult> receiveFuture = buffer.receiveMessageAsync(request);
return SQSQueueUtils.waitForFuture(receiveFuture);
} else {
try {
heartbeatToQueueIfNecessary(queueUrl);
return super.receiveMessage(request);
} catch (QueueDoesNotExistException e) {
request.setQueueUrl(recreateQueue(queueUrl));
return super.receiveMessage(request);
}
}
}