Using publishMessage() method, I am able to create dynamic topics, subscribing with dynamic queues, but sns not publishing messsage to sqs. What is the issues here?
public void publishMessage(String topicName, String message) {
String topicArn = createTopic(topicName);
subSQS(topicArn, topicName);
pubTopic(message, topicArn);
}
private String createTopic(String topicName) {
CreateTopicResponse result = null;
CreateTopicRequest request = CreateTopicRequest.builder()
.name(topicName)
.build();
result = snsClient.createTopic(request);
return result.topicArn();
}
private void pubTopic(String message, String topicArn) {
PublishRequest request = PublishRequest.builder()
.message(message)
.topicArn(topicArn)
.build();
PublishResponse result = this.snsClient.publish(request);
log.info(result.messageId() + " Message sent. Status is " + result.sdkHttpResponse().statusCode());
}
private void subSQS(String topicArn, String queueName) {
CreateQueueRequest createQueueRequest = CreateQueueRequest.builder().queueName(queueName).build();
String queueUrl = sqsClient.createQueue(createQueueRequest).queueUrl();
// Get the ARN of the SQS queue
GetQueueAttributesRequest getQueueAttributesRequest = GetQueueAttributesRequest.builder()
.queueUrl(queueUrl)
.attributeNames( QueueAttributeName.QUEUE_ARN)
.build();
GetQueueAttributesResponse queueAttributes = sqsClient.getQueueAttributes(getQueueAttributesRequest);
String queueArn = queueAttributes.attributes().get(QueueAttributeName.QUEUE_ARN);
try {
SubscribeRequest request = SubscribeRequest.builder()
.protocol("sqs")
.endpoint(queueArn)
.returnSubscriptionArn(true)
.topicArn(topicArn)
.build();
SubscribeResponse result = snsClient.subscribe(request);
System.out.println("Subscription ARN: " + result.subscriptionArn() + "nn Status is " + result.sdkHttpResponse().statusCode());
} catch (SnsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
Recognized by AWS
3