package com.myproject;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.model.*;
public class SQSUtils {
public static void checkCreateQueues(AmazonSQS queue, String... queueNames) {
for (String queueName : queueNames) {
queue.createQueue(new CreateQueueRequest().withQueueName(queueName));
}
}
private static String getQueueUrl(AmazonSQS queue, String queueName) {
return queue.getQueueUrl(new GetQueueUrlRequest().withQueueName(queueName)).getQueueUrl();
}
public static String getQueueArn(AmazonSQS queue, String queueName) {
return queue.getQueueAttributes(new GetQueueAttributesRequest().withAttributeNames("QueueArn").withQueueUrl(getQueueUrl(queue, queueName))).getAttributes().get("QueueArn");
}
public static void sendMessageTo(AmazonSQS queue, String queueName, String message) {
queue.sendMessage(new SendMessageRequest().withQueueUrl(getQueueUrl(queue, queueName)).withMessageBody(message));
}
public static String[] readMessageFrom(AmazonSQS queue, String queueName) {
ReceiveMessageResult receiveMessageResult = queue.receiveMessage(
new ReceiveMessageRequest()
.withQueueUrl(getQueueUrl(queue, queueName))
.withMaxNumberOfMessages(1) // Process one at a time
.withWaitTimeSeconds(20) // Use long polling client
);
if (receiveMessageResult.getMessages().isEmpty()) {
return readMessageFrom(queue, queueName);
}
Message message = receiveMessageResult.getMessages().get(0);
return new String[]{message.getBody(), message.getReceiptHandle()};
}
public static void acknowledge(AmazonSQS queue, String queueName, String receipt) {
queue.deleteMessage(new DeleteMessageRequest().withQueueUrl(getQueueUrl(queue, queueName)).withReceiptHandle(receipt));
}
public static void renewTimeout(AmazonSQS queue, String queueName, String receipt, int timeout) {
queue.changeMessageVisibility(new ChangeMessageVisibilityRequest().withQueueUrl(getQueueUrl(queue, queueName)).withReceiptHandle(receipt).withVisibilityTimeout(timeout)); // Say I need 20 more seconds to process
}
}