shnakkydoodle.queueing.provider.aws.AwsProvider.java Source code

Java tutorial

Introduction

Here is the source code for shnakkydoodle.queueing.provider.aws.AwsProvider.java

Source

/*
 * 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

}