in src/main/java/com/amazonaws/services/sqs/AmazonSQSIdleQueueDeletingClient.java [173:213]
public CreateQueueResult createQueue(CreateQueueRequest request) {
Map<String, String> attributes = new HashMap<>(request.getAttributes());
Optional<Long> retentionPeriod = getRetentionPeriod(attributes);
if (!retentionPeriod.isPresent()) {
return super.createQueue(request);
}
String queueName = request.getQueueName();
if (!queueName.startsWith(queueNamePrefix)) {
throw new IllegalArgumentException();
}
String retentionPeriodString = retentionPeriod.get().toString();
long currentTimestamp = System.currentTimeMillis();
CreateQueueRequest superRequest = request.clone()
.withQueueName(queueName)
.withAttributes(attributes);
CreateQueueResult result = super.createQueue(superRequest);
String queueUrl = result.getQueueUrl();
TagQueueRequest tagQueueRequest = new TagQueueRequest().withQueueUrl(queueUrl)
.addTagsEntry(IDLE_QUEUE_RETENTION_PERIOD_TAG, retentionPeriodString)
.addTagsEntry(LAST_HEARTBEAT_TIMESTAMP_TAG, String.valueOf(currentTimestamp));
amazonSqsToBeExtended.tagQueue(tagQueueRequest);
// TODO-RS: Filter more carefully to all attributes valid for createQueue
List<String> attributeNames = Arrays.asList(QueueAttributeName.ReceiveMessageWaitTimeSeconds.toString(),
QueueAttributeName.VisibilityTimeout.toString());
Map<String, String> createdAttributes = amazonSqsToBeExtended.getQueueAttributes(queueUrl, attributeNames).getAttributes();
createdAttributes.put(Constants.IDLE_QUEUE_RETENTION_PERIOD, retentionPeriodString);
QueueMetadata metadata = new QueueMetadata(queueName, queueUrl, createdAttributes);
queues.put(queueUrl, metadata);
long initialDelay = ThreadLocalRandom.current().nextLong(heartbeatIntervalSeconds);
metadata.heartbeater = executor.scheduleAtFixedRate(() -> heartbeatToQueue(queueUrl),
initialDelay, heartbeatIntervalSeconds, TimeUnit.SECONDS);
return result;
}