List of usage examples for com.amazonaws.services.sns.model SubscribeResult getSubscriptionArn
public String getSubscriptionArn()
The ARN of the subscription if it is confirmed, or the string "pending confirmation" if the subscription requires confirmation.
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(); }