Java tutorial
/* * Author Stephen * * Copyright (c) 2015 Stephen Booysen, Inc. All Rights Reserved. * * This software is the confidential and proprietary information of * Stephen Booysen. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Stephen Booysen * * Stephen Booysen MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. */ /** * */ package shnakkydoodle.queueing.provider.aws; import java.util.ArrayList; import java.util.List; import java.util.UUID; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.model.Region; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; import com.amazonaws.services.sqs.model.CreateQueueRequest; import com.amazonaws.services.sqs.model.DeleteMessageRequest; import com.amazonaws.services.sqs.model.Message; import com.amazonaws.services.sqs.model.ReceiveMessageRequest; import com.amazonaws.services.sqs.model.SendMessageBatchRequest; import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry; import com.amazonaws.services.sqs.model.SendMessageRequest; import shnakkydoodle.queueing.common.IQueueProvider; /** * @author Stephen * */ public class AwsProvider implements IQueueProvider { // region Private Members // Thre credentials AWSCredentials credentials = null; /** * Create a aws sanitised queuename * * @param queuename * @return */ private String awsName(String queuename) { return queuename.replace(" ", "-").replaceAll(".", "-"); } // endregion // region Public Members /** * Constructor * * @param awsaccesskeyid * @param awssecretaccesskey */ public AwsProvider(String awsaccesskeyid, String awssecretaccesskey) { credentials = new BasicAWSCredentials(awsaccesskeyid, awssecretaccesskey); } /** * Create the queue * * @param queueName */ @Override public void createQueue(String queueName) throws Exception { new AmazonSQSClient(credentials).createQueue(queueName); } /** * Delete the queue * * @param queueName */ @Override public void deleteQueue(String queueName) throws Exception { AmazonSQS sqs = new AmazonSQSClient(credentials); sqs.setRegion(Region.EU_Ireland.toAWSRegion()); CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName); sqs.deleteQueue(sqs.createQueue(createQueueRequest).getQueueUrl()); } /** * Enqueue a message * * @param queuename * @param message */ @Override public void enqueue(String queueName, String message) throws Exception { AmazonSQS sqs = new AmazonSQSClient(credentials); sqs.setRegion(Region.EU_Ireland.toAWSRegion()); sqs.createQueue(queueName); CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName); String myQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl(); sqs.sendMessage(new SendMessageRequest(myQueueUrl, message)); } /** * Enqueue a bunch of message * * @param queuename * @param message */ @Override public void enqueue(String queueName, ArrayList<String> messages) throws Exception { AmazonSQS sqs = new AmazonSQSClient(credentials); sqs.setRegion(Region.EU_Ireland.toAWSRegion()); sqs.createQueue(queueName); CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName); String myQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl(); SendMessageBatchRequest batchRequest = new SendMessageBatchRequest(myQueueUrl); batchRequest.setQueueUrl(myQueueUrl); List<SendMessageBatchRequestEntry> entries = new ArrayList<SendMessageBatchRequestEntry>(); for (String message : messages) { entries.add(new SendMessageBatchRequestEntry(UUID.randomUUID().toString(), message)); } batchRequest.setEntries(entries); sqs.sendMessageBatch(batchRequest); } /** * Dequeue a message * * @param queuename * @param message */ @Override public String dequeue(String queueName) throws Exception { AmazonSQS sqs = new AmazonSQSClient(credentials); sqs.setRegion(Region.EU_Ireland.toAWSRegion()); sqs.createQueue(queueName); CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName); String queueUrl = sqs.createQueue(createQueueRequest).getQueueUrl(); ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl); Message message = sqs.receiveMessage(receiveMessageRequest).getMessages().get(0); if (message != null) { sqs.deleteMessage(new DeleteMessageRequest(queueUrl, message.getReceiptHandle())); return message.getBody(); } return null; } /** * Dequeue all messages * * @param queuename * @param message * @return all the messages */ @Override public ArrayList<String> dequeueAll(String queueName) throws Exception { ArrayList<String> data = new ArrayList<String>(); AmazonSQS sqs = new AmazonSQSClient(credentials); sqs.setRegion(Region.EU_Ireland.toAWSRegion()); sqs.createQueue(queueName); CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName); String queueUrl = sqs.createQueue(createQueueRequest).getQueueUrl(); ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl); for (Message message : sqs.receiveMessage(receiveMessageRequest).getMessages()) { data.add(message.getBody()); sqs.deleteMessage(new DeleteMessageRequest(queueUrl, message.getReceiptHandle())); } return data; } // endregion }