Example usage for com.amazonaws.services.sns.model SubscribeResult getSubscriptionArn

List of usage examples for com.amazonaws.services.sns.model SubscribeResult getSubscriptionArn

Introduction

In this page you can find the example usage for com.amazonaws.services.sns.model SubscribeResult getSubscriptionArn.

Prototype


public String getSubscriptionArn() 

Source Link

Document

The ARN of the subscription if it is confirmed, or the string "pending confirmation" if the subscription requires confirmation.

Usage

From source file:com.comcast.cmb.test.tools.CMBTutorial.java

License:Apache License

public static void main(String[] args) {

    try {/*  w  ww.jav  a  2  s. c  o  m*/

        Util.initLog4jTest();

        //TODO: set user id and credentials for two distinct users

        // user "cqs_test_1"

        //BasicAWSCredentials user1Credentials = new BasicAWSCredentials("<access_key>", "<secret_key>");

        BasicAWSCredentials user1Credentials = new BasicAWSCredentials("Z2DVBFRNZ2C2SSXDWS5F",
                "bH2UQiJkpctBaE3eaDob19fj5J9Q1FVafrZantBp");

        // user "cqs_test_2"

        //String user2Id = "<user_id>";
        String user2Id = "389653920093";

        //BasicAWSCredentials user2Credentials = new BasicAWSCredentials("<access_key>", "<secret_key>");

        BasicAWSCredentials user2Credentials = new BasicAWSCredentials("QL8Q1VOBCSJC5FZ2DMIU",
                "n6a82gyJZ04Z+Xqp7OgfqPtbbKqVc3UbuOTNrF+7");

        // service urls

        //TODO: add service URLs

        //String cqsServerUrl = "http://<host>:<port>";
        //String cnsServerUrl = "http://<host>:<port>";

        String cqsServerUrl = "http://localhost:6059";
        String cnsServerUrl = "http://localhost:6061";

        // initialize service

        AmazonSQSClient sqs = new AmazonSQSClient(user1Credentials);
        sqs.setEndpoint(cqsServerUrl);

        AmazonSNSClient sns = new AmazonSNSClient(user2Credentials);
        sns.setEndpoint(cnsServerUrl);

        // create queue

        Random randomGenerator = new Random();

        String queueName = QUEUE_PREFIX + randomGenerator.nextLong();

        HashMap<String, String> attributeParams = new HashMap<String, String>();
        CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName);
        createQueueRequest.setAttributes(attributeParams);
        String queueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();

        AddPermissionRequest addPermissionRequest = new AddPermissionRequest();
        addPermissionRequest.setQueueUrl(queueUrl);
        addPermissionRequest.setActions(Arrays.asList("SendMessage"));
        addPermissionRequest.setLabel(UUID.randomUUID().toString());
        addPermissionRequest.setAWSAccountIds(Arrays.asList(user2Id));
        sqs.addPermission(addPermissionRequest);

        // create topic

        String topicName = "TSTT" + randomGenerator.nextLong();

        CreateTopicRequest createTopicRequest = new CreateTopicRequest(topicName);
        CreateTopicResult createTopicResult = sns.createTopic(createTopicRequest);
        String topicArn = createTopicResult.getTopicArn();

        // subscribe and confirm cqs endpoint

        SubscribeRequest subscribeRequest = new SubscribeRequest();
        String queueArn = getArnForQueueUrl(queueUrl);
        subscribeRequest.setEndpoint(queueArn);
        subscribeRequest.setProtocol("cqs");
        subscribeRequest.setTopicArn(topicArn);
        SubscribeResult subscribeResult = sns.subscribe(subscribeRequest);
        String subscriptionArn = subscribeResult.getSubscriptionArn();

        if (subscriptionArn.equals("pending confirmation")) {

            Thread.sleep(500);

            ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
            receiveMessageRequest.setQueueUrl(queueUrl);
            receiveMessageRequest.setMaxNumberOfMessages(1);
            ReceiveMessageResult receiveMessageResult = sqs.receiveMessage(receiveMessageRequest);

            List<Message> messages = receiveMessageResult.getMessages();

            if (messages != null && messages.size() == 1) {

                JSONObject o = new JSONObject(messages.get(0).getBody());

                if (!o.has("SubscribeURL")) {
                    throw new Exception("message is not a confirmation messsage");
                }

                String subscriptionUrl = o.getString("SubscribeURL");
                httpGet(subscriptionUrl);

                DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest();
                deleteMessageRequest.setReceiptHandle(messages.get(0).getReceiptHandle());
                deleteMessageRequest.setQueueUrl(queueUrl);
                sqs.deleteMessage(deleteMessageRequest);

            } else {
                throw new Exception("no confirmation message found");
            }
        }

        // publish and receive message

        PublishRequest publishRequest = new PublishRequest();
        String messageText = "quamvis sint sub aqua, sub aqua maledicere temptant";
        publishRequest.setMessage(messageText);
        publishRequest.setSubject("unit test message");
        publishRequest.setTopicArn(topicArn);
        sns.publish(publishRequest);

        Thread.sleep(500);

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(1);
        ReceiveMessageResult receiveMessageResult = sqs.receiveMessage(receiveMessageRequest);

        List<Message> messages = receiveMessageResult.getMessages();

        if (messages != null && messages.size() == 1) {

            String messageBody = messages.get(0).getBody();

            if (!messageBody.contains(messageText)) {
                throw new Exception("message text not found");
            }

            DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest();
            deleteMessageRequest.setReceiptHandle(messages.get(0).getReceiptHandle());
            deleteMessageRequest.setQueueUrl(queueUrl);
            sqs.deleteMessage(deleteMessageRequest);

        } else {
            throw new Exception("no messages found");
        }

        // subscribe and confirm http endpoint

        String id = randomGenerator.nextLong() + "";
        String endPointUrl = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "recv/" + id;
        String lastMessageUrl = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "info/" + id + "?showLast=true";

        subscribeRequest = new SubscribeRequest();
        subscribeRequest.setEndpoint(endPointUrl);
        subscribeRequest.setProtocol("http");
        subscribeRequest.setTopicArn(topicArn);
        subscribeResult = sns.subscribe(subscribeRequest);
        subscriptionArn = subscribeResult.getSubscriptionArn();

        if (subscriptionArn.equals("pending confirmation")) {

            Thread.sleep(500);

            String response = httpGet(lastMessageUrl);

            JSONObject o = new JSONObject(response);

            if (!o.has("SubscribeURL")) {
                throw new Exception("message is not a confirmation messsage");
            }

            String subscriptionUrl = o.getString("SubscribeURL");

            response = httpGet(subscriptionUrl);
        }

        // publish and receive message

        publishRequest = new PublishRequest();
        publishRequest.setMessage(messageText);
        publishRequest.setSubject("unit test message");
        publishRequest.setTopicArn(topicArn);
        sns.publish(publishRequest);

        Thread.sleep(500);

        String response = httpGet(lastMessageUrl);

        if (response != null && response.length() > 0) {

            if (!response.contains(messageText)) {
                throw new Exception("message text not found");
            }

        } else {
            throw new Exception("no messages found");
        }

        // delete queue and topic

        DeleteTopicRequest deleteTopicRequest = new DeleteTopicRequest(topicArn);
        sns.deleteTopic(deleteTopicRequest);

        sqs.deleteQueue(new DeleteQueueRequest(queueUrl));

        System.out.println("OK");

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

From source file:com.leverno.ysbos.archive.example.AmazonGlacierDownloadInventoryWithSQSPolling.java

License:Open Source License

private static void setupSNS() {
    CreateTopicRequest request = new CreateTopicRequest().withName(snsTopicName);
    CreateTopicResult result = snsClient.createTopic(request);
    snsTopicARN = result.getTopicArn();//from   ww  w .  j  a  va2 s .  c  om

    SubscribeRequest request2 = new SubscribeRequest().withTopicArn(snsTopicARN).withEndpoint(sqsQueueARN)
            .withProtocol("sqs");
    SubscribeResult result2 = snsClient.subscribe(request2);

    snsSubscriptionARN = result2.getSubscriptionArn();
}

From source file:com.vrane.metaGlacier.gui.SNSTopic.java

/**
 * Creates a SNS topic./*from   w w w.j a va2  s . c om*/
 *
 * @param topic string
 * @param email address to be notified when there is any event for this topic.
 * @return false if there is any error.
 * @throws Exception
 */
public boolean createTopic(final String topic, final String email) throws Exception {
    CreateTopicRequest request = new CreateTopicRequest().withName(topic);
    CreateTopicResult result = null;

    try {
        result = snsClient.createTopic(request);
    } catch (Exception e) {
        LGR.setUseParentHandlers(true);
        LGR.log(Level.SEVERE, null, e);
        LGR.setUseParentHandlers(false);
        return false;
    }

    topicARN = result.getTopicArn();
    LGR.log(Level.INFO, "topic arn is {0}", topicARN);

    SubscribeRequest request2 = new SubscribeRequest().withTopicArn(topicARN).withEndpoint(email)
            .withProtocol("email");
    SubscribeResult result2 = snsClient.subscribe(request2);

    LGR.log(Level.INFO, "subscription ARN {0}", result2.getSubscriptionArn());

    return true;
}

From source file:com.zotoh.cloudapi.aws.SNS.java

License:Open Source License

@SuppressWarnings("unused")
@Override/*from   ww  w  . j  a va2s .c om*/
public void subscribe(String topic, EndpointType type, DataFormat fmt, String endpt)
        throws CloudException, InternalException {
    tstEStrArg("topic-name", topic);
    tstEStrArg("endpoint", endpt);
    SubscribeResult res = _svc.getCloud().getSNS().subscribe(new SubscribeRequest()
            .withProtocol(AWSAPI.toProtocol(fmt, type)).withTopicArn(topic).withEndpoint(endpt));
    String subId = res == null ? null : res.getSubscriptionArn();
    //TODO strange, shouldn't it return subscription-id
}

From source file:net.smartcosmos.plugin.service.aws.notification.AwsNotificationService.java

License:Apache License

@Override
public String subscribe(INotificationEndpoint notificationEndpoint) {
    String subscriptionArn;/*from ww  w.  j  a  v a  2s  .c o m*/

    Preconditions.checkArgument((notificationEndpoint != null), "Notification endpoint must not be null");

    Preconditions.checkArgument((notificationEndpoint.getTopicArn() != null),
            "Notification Topic ARN must not be null");

    AmazonSNS sns = new AmazonSNSClient(credentials);
    Region usEast1 = Region.getRegion(Regions.US_EAST_1);
    sns.setRegion(usEast1);

    try {
        SubscribeRequest request = new SubscribeRequest(notificationEndpoint.getTopicArn(), "https",
                notificationEndpoint.getNotificationEndpointUrl());

        SubscribeResult result = sns.subscribe(request);

        subscriptionArn = result.getSubscriptionArn();

        //
        // Event
        //
        INotificationResultObject<IAccount> nro = new NotificationResultObject<>(EntityReferenceType.Account,
                notificationEndpoint.getAccount(), result.getSubscriptionArn());
        IEventService eventService = context.getServiceFactory()
                .getEventService(notificationEndpoint.getAccount());
        eventService.recordEvent(EventType.NotificationSubscribe, notificationEndpoint.getAccount(), null, nro);

    } finally {
        sns.shutdown();
    }

    return subscriptionArn;
}

From source file:org.apache.usergrid.persistence.queue.impl.SNSQueueManagerImpl.java

License:Apache License

private String setupTopics(final String queueName) throws Exception {

    logger.info("Setting up setupTopics SNS/SQS...");

    String primaryTopicArn = AmazonNotificationUtils.getTopicArn(sns, queueName, true);

    if (logger.isTraceEnabled()) {
        logger.trace("SNS/SQS Setup: primaryTopicArn={}", primaryTopicArn);
    }//  ww  w.  j  av a 2s  . c o  m

    String queueUrl = AmazonNotificationUtils.getQueueUrlByName(sqs, queueName);
    String primaryQueueArn = AmazonNotificationUtils.getQueueArnByName(sqs, queueName);

    if (logger.isTraceEnabled()) {
        logger.trace("SNS/SQS Setup: primaryQueueArn={}", primaryQueueArn);
    }

    if (primaryQueueArn == null) {
        if (logger.isTraceEnabled()) {
            logger.trace("SNS/SQS Setup: primaryQueueArn is null, creating queue...");
        }

        queueUrl = AmazonNotificationUtils.createQueue(sqs, queueName, fig);
        primaryQueueArn = AmazonNotificationUtils.getQueueArnByUrl(sqs, queueUrl);

        if (logger.isTraceEnabled()) {
            logger.trace("SNS/SQS Setup: New Queue URL=[{}] ARN=[{}]", queueUrl, primaryQueueArn);
        }
    }

    try {

        SubscribeRequest primarySubscribeRequest = new SubscribeRequest(primaryTopicArn, "sqs",
                primaryQueueArn);
        sns.subscribe(primarySubscribeRequest);

        // ensure the SNS primary topic has permission to send to the primary SQS queue
        List<String> primaryTopicArnList = new ArrayList<>();
        primaryTopicArnList.add(primaryTopicArn);
        AmazonNotificationUtils.setQueuePermissionsToReceive(sqs, queueUrl, primaryTopicArnList);
    } catch (AmazonServiceException e) {
        logger.error("Unable to subscribe PRIMARY queue=[{}] to topic=[{}]", queueUrl, primaryTopicArn, e);
    }

    if (fig.isMultiRegion() && scope.getRegionImplementation() == LegacyQueueScope.RegionImplementation.ALL) {

        String multiRegion = fig.getRegionList();

        if (logger.isTraceEnabled()) {
            logger.trace("MultiRegion Setup specified, regions: [{}]", multiRegion);
        }

        String[] regionNames = multiRegion.split(",");

        final Map<String, String> arrQueueArns = new HashMap<>(regionNames.length + 1);
        final Map<String, String> topicArns = new HashMap<>(regionNames.length + 1);

        arrQueueArns.put(primaryQueueArn, fig.getPrimaryRegion());
        topicArns.put(primaryTopicArn, fig.getPrimaryRegion());

        for (String regionName : regionNames) {

            regionName = regionName.trim();
            Regions regions = Regions.fromName(regionName);
            Region region = Region.getRegion(regions);

            AmazonSQSClient sqsClient = createSQSClient(region);
            AmazonSNSClient snsClient = createSNSClient(region); // do this stuff synchronously

            // getTopicArn will create the SNS topic if it doesn't exist
            String topicArn = AmazonNotificationUtils.getTopicArn(snsClient, queueName, true);
            topicArns.put(topicArn, regionName);

            // create the SQS queue if it doesn't exist
            String queueArn = AmazonNotificationUtils.getQueueArnByName(sqsClient, queueName);
            if (queueArn == null) {
                queueUrl = AmazonNotificationUtils.createQueue(sqsClient, queueName, fig);
                queueArn = AmazonNotificationUtils.getQueueArnByUrl(sqsClient, queueUrl);
            }

            arrQueueArns.put(queueArn, regionName);
        }

        if (logger.isTraceEnabled()) {
            logger.trace("Creating Subscriptions...");
        }

        for (Map.Entry<String, String> queueArnEntry : arrQueueArns.entrySet()) {
            String queueARN = queueArnEntry.getKey();
            String strSqsRegion = queueArnEntry.getValue();

            Regions sqsRegions = Regions.fromName(strSqsRegion);
            Region sqsRegion = Region.getRegion(sqsRegions);

            AmazonSQSClient subscribeSqsClient = createSQSClient(sqsRegion);

            // ensure the URL used to subscribe is for the correct name/region
            String subscribeQueueUrl = AmazonNotificationUtils.getQueueUrlByName(subscribeSqsClient, queueName);

            // this list used later for adding permissions to queues
            List<String> topicArnList = new ArrayList<>();

            for (Map.Entry<String, String> topicArnEntry : topicArns.entrySet()) {

                String topicARN = topicArnEntry.getKey();
                topicArnList.add(topicARN);

                String strSnsRegion = topicArnEntry.getValue();
                Regions snsRegions = Regions.fromName(strSnsRegion);
                Region snsRegion = Region.getRegion(snsRegions);

                AmazonSNSClient subscribeSnsClient = createSNSClient(snsRegion); // do this stuff synchronously
                SubscribeRequest subscribeRequest = new SubscribeRequest(topicARN, "sqs", queueARN);

                try {

                    logger.info("Subscribing Queue ARN/Region=[{} / {}] and Topic ARN/Region=[{} / {}]",
                            queueARN, strSqsRegion, topicARN, strSnsRegion);

                    SubscribeResult subscribeResult = subscribeSnsClient.subscribe(subscribeRequest);
                    String subscriptionARN = subscribeResult.getSubscriptionArn();
                    if (logger.isTraceEnabled()) {
                        logger.trace(
                                "Successfully subscribed Queue ARN=[{}] to Topic ARN=[{}], subscription ARN=[{}]",
                                queueARN, topicARN, subscriptionARN);
                    }
                } catch (Exception e) {
                    logger.error("ERROR Subscribing Queue ARN/Region=[{} / {}] and Topic ARN/Region=[{} / {}]",
                            queueARN, strSqsRegion, topicARN, strSnsRegion, e);
                }
            }

            if (logger.isTraceEnabled()) {
                logger.trace("Adding permission to receive messages...");
            }
            // add permission to each queue, providing a list of topics that it's subscribed to
            AmazonNotificationUtils.setQueuePermissionsToReceive(subscribeSqsClient, subscribeQueueUrl,
                    topicArnList);
        }
    }

    return primaryTopicArn;
}

From source file:org.duracloud.common.sns.SnsSubscriptionManager.java

License:Apache License

public synchronized void connect() {
    if (initialized) {
        throw new DuraCloudRuntimeException("this manager is already connected");
    }/*from w w w  . j  av a2 s.com*/

    //create sqs queue
    log.info("creating sqs queue");
    CreateQueueRequest request = new CreateQueueRequest(this.queueName);
    Map<String, String> attributes = new HashMap<String, String>();
    attributes.put("ReceiveMessageWaitTimeSeconds", "20");
    request.setAttributes(attributes);
    CreateQueueResult result;
    try {
        result = sqsClient.createQueue(request);
        this.queueUrl = result.getQueueUrl();
        log.info("sqs queue created: {}", this.queueUrl);
    } catch (QueueNameExistsException ex) {
        log.info("queue with name {} already exists.");
        GetQueueUrlResult queueUrlResult = sqsClient.getQueueUrl(this.queueName);
        this.queueUrl = queueUrlResult.getQueueUrl();
        log.info("sqs queue url retrieved: {}", this.queueUrl);
    }

    String queueArnKey = "QueueArn";
    GetQueueAttributesResult getQueueAttrResult = sqsClient.getQueueAttributes(this.queueUrl,
            Arrays.asList(queueArnKey));
    log.info("subscribing {} to {}", queueUrl, topicArn);

    String queueArn = getQueueAttrResult.getAttributes().get(queueArnKey);

    SubscribeResult subscribeResult = this.snsClient.subscribe(topicArn, "sqs", queueArn);
    this.subscriptionArn = subscribeResult.getSubscriptionArn();

    Map<String, String> queueAttributes = new HashMap<String, String>();
    queueAttributes.put("Policy", generateSqsPolicyForTopic(queueArn, topicArn));

    sqsClient.setQueueAttributes(new SetQueueAttributesRequest(queueUrl, queueAttributes));

    log.info("subscription complete: {}", this.subscriptionArn);

    //subscribe queue to topic
    this.initialized = true;

    startPolling();

}

From source file:org.transitime.maintenance.AwsGlacierInventoryRetriever.java

License:Open Source License

/**
 * For retrieving vault inventory. For initializing SNS for determining when
 * job completed. Does nothing if member snsTopicName is null. Sets members
 * snsTopicARN and snsSubscriptionARN.//from w  w  w .j a  va2s.co  m
 */
void setupSNS() {
    // If no snsTopicName setup then simply return
    if (snsTopicName == null)
        return;

    CreateTopicRequest request = new CreateTopicRequest().withName(snsTopicName);
    CreateTopicResult result = snsClient.createTopic(request);
    snsTopicARN = result.getTopicArn();

    SubscribeRequest request2 = new SubscribeRequest().withTopicArn(snsTopicARN).withEndpoint(sqsQueueARN)
            .withProtocol("sqs");
    SubscribeResult result2 = snsClient.subscribe(request2);

    snsSubscriptionARN = result2.getSubscriptionArn();
}