Created
December 9, 2019 19:48
-
-
Save aksyuma/79c946ed4e618c1f871f50ecb1819a0f to your computer and use it in GitHub Desktop.
Sample java code that creates SNS topic, SQS queue and subscribes the queue to the topic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * | |
| */ | |
| package com.syumaK.AWSSQS; | |
| /** | |
| * @author syumaK | |
| * | |
| */ | |
| /* | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"). | |
| * You may not use this file except in compliance with the License. | |
| * A copy of the License is located at | |
| * | |
| * http://www.amazonaws.cn/apache2.0 | |
| * | |
| * or in the "license" file accompanying this file. This file is distributed | |
| * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either | |
| * express or implied. See the License for the specific language governing | |
| * permissions and limitations under the License. | |
| * | |
| */ | |
| import org.apache.log4j.BasicConfigurator; | |
| import software.amazon.awssdk.regions.Region; | |
| import software.amazon.awssdk.services.sns.SnsClient; | |
| import software.amazon.awssdk.services.sqs.SqsClient; | |
| import software.amazon.awssdk.services.sqs.model.Message; | |
| import software.amazon.awssdk.services.sqs.model.QueueAttributeName; | |
| import software.amazon.awssdk.services.sns.model.SubscribeRequest; | |
| import software.amazon.awssdk.services.sns.model.SubscribeResponse; | |
| import software.amazon.awssdk.services.sns.model.CreateTopicRequest; | |
| import software.amazon.awssdk.services.sns.model.CreateTopicRequest; | |
| import software.amazon.awssdk.services.sns.model.CreateTopicResponse; | |
| import software.amazon.awssdk.services.sns.model.CreateTopicResponse; | |
| import software.amazon.awssdk.services.sqs.model.ListQueuesRequest; | |
| import software.amazon.awssdk.services.sqs.model.CreateQueueRequest; | |
| import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest; | |
| import software.amazon.awssdk.services.sqs.model.GetQueueAttributesRequest; | |
| import software.amazon.awssdk.services.sqs.model.GetQueueAttributesResponse; | |
| import software.amazon.awssdk.services.sqs.model.GetQueueUrlRequest; | |
| import software.amazon.awssdk.services.sqs.model.SendMessageRequest; | |
| import software.amazon.awssdk.services.sqs.model.ListQueuesResponse; | |
| import software.amazon.awssdk.services.sqs.model.CreateQueueResponse; | |
| import software.amazon.awssdk.services.sqs.model.GetQueueUrlResponse; | |
| import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest; | |
| import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; | |
| import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequest; | |
| import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequestEntry; | |
| import software.amazon.awssdk.services.sqs.model.ChangeMessageVisibilityRequest; | |
| import java.util.Collection; | |
| import java.util.List; | |
| import java.util.Map; | |
| import java.util.Map.Entry; | |
| public class subscribeSQS { | |
| public static void main(String[] args) { | |
| String topicArn; | |
| String SQSQueue; | |
| String queueUrl; | |
| SnsClient snsClient = SnsClient.builder().region(Region.US_EAST_1).build(); | |
| SqsClient sqsClient = SqsClient.builder().region(Region.US_EAST_1).build(); | |
| System.out.println("==============================================="); | |
| System.out.println("Getting Started with Amazon SQS Standard Queues"); | |
| System.out.println("===============================================\n"); | |
| //BasicConfigurator.configure(); | |
| topicArn = createSNSTopic(snsClient); | |
| queueUrl = createSQSQueue(sqsClient); | |
| subscribeSQStoSNS(queueUrl, topicArn, sqsClient, snsClient); | |
| } | |
| public static String createSNSTopic(SnsClient snsClient) { | |
| // Creating SNS Topic | |
| String topicName = "DecTopic" + System.currentTimeMillis(); | |
| //SnsClient snsClient = SnsClient.builder().region(Region.US_EAST_1).build(); | |
| CreateTopicRequest createSNSRequest = CreateTopicRequest.builder() | |
| .name(topicName) | |
| .build(); | |
| CreateTopicResponse SNSresult = snsClient.createTopic(createSNSRequest); | |
| System.out.println("\n\nCreated SNS topic: " + topicName + " " + " with Arn: " + SNSresult.topicArn()+ " " + "and StatusCode : " + SNSresult.sdkHttpResponse().statusCode()); | |
| String topicArn = SNSresult.topicArn(); | |
| return topicArn; | |
| } | |
| public static String createSQSQueue(SqsClient sqsClient) { | |
| // Creating SQS queue | |
| String queueName = "DecQueue" + System.currentTimeMillis(); | |
| //SqsClient sqsClient = SqsClient.builder().region(Region.US_EAST_1).build(); | |
| CreateQueueRequest createQueueRequest = CreateQueueRequest.builder() | |
| .queueName(queueName) | |
| .build(); | |
| CreateQueueResponse SQSresult = sqsClient.createQueue(createQueueRequest); | |
| System.out.println("\n\nCreated SQS queue: " + queueName + " " + " with Url: " + SQSresult.queueUrl()+ " " + " and StatusCode : " + SQSresult.sdkHttpResponse().statusCode()); | |
| String queueUrl = SQSresult.queueUrl(); | |
| return queueUrl; | |
| } | |
| public static void subscribeSQStoSNS(String queueUrl, String topicArn, SqsClient sqsClient, SnsClient snsClient) { | |
| /* with AWS Java SDK v1, you could subscribe an SQS queue to an SNS topic by | |
| * calling "Topics.subscribeQueue"()[1] where the endpoint object takes in queueUrl. | |
| * | |
| * with AWS Java SDK v2, to subscribe an SQS queue to an SNS topic | |
| * one needs to use "SunscribeRequest.builder"() [2] where the endpoint object takes in queueArn. | |
| * | |
| * [1] https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sns/util/Topics.html | |
| * [2] https://sdk.amazonaws.com/java/api/2.0.0-preview-11/software/amazon/awssdk/services/sns/model/SubscribeRequest.Builder.html | |
| * | |
| */ | |
| // Step 1: We call "get-queue-attributes" API to retrieve the SQS queue Arn | |
| GetQueueAttributesRequest QueueAttributesRequest = GetQueueAttributesRequest.builder() | |
| .queueUrl(queueUrl) | |
| .attributeNamesWithStrings("All") | |
| .build(); | |
| GetQueueAttributesResponse QueueAttributesResult = sqsClient.getQueueAttributes(QueueAttributesRequest); | |
| Map<String, String> sqsAttributeMap = QueueAttributesResult.attributesAsStrings(); | |
| System.out.println("\n\n"+ QueueAttributesRequest); | |
| String queueArn = sqsAttributeMap.get("QueueArn"); | |
| //System.out.println("\n\n"+ queueArn); | |
| // Step 2: We call "SubscribeRequest.builder" to subscribe the SQS queue to the SNS topic | |
| SubscribeRequest Qrequest = SubscribeRequest.builder() | |
| .protocol("sqs") | |
| .endpoint(queueArn) | |
| .returnSubscriptionArn(true) | |
| .topicArn(topicArn) | |
| .build(); | |
| SubscribeResponse Qresponse = snsClient.subscribe(Qrequest); | |
| System.out.println("\n\nCreated Subscription ARN: " + Qresponse.subscriptionArn()+ " " + " and StatusCode : " + Qresponse.sdkHttpResponse().statusCode()); | |
| } | |
| } |
The code will not work. You also need to provide permission to SNS topic from SQS queue to send the message.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Can you please share the sample code to set permission of queue after subscribing it?