diff --git a/build.gradle b/build.gradle index e1a6dc3..f2f0577 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,10 @@ dependencies { // Health Check implementation 'org.springframework.boot:spring-boot-starter-actuator' + + // AWS + implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.0.1") + implementation 'io.awspring.cloud:spring-cloud-aws-starter-sqs' } tasks.named('bootBuildImage') { diff --git a/src/main/java/io/sobok/SobokSobok/config/SQSConfig.java b/src/main/java/io/sobok/SobokSobok/config/SQSConfig.java new file mode 100644 index 0000000..89599f1 --- /dev/null +++ b/src/main/java/io/sobok/SobokSobok/config/SQSConfig.java @@ -0,0 +1,45 @@ +package io.sobok.SobokSobok.config; + +import io.awspring.cloud.sqs.operations.SqsTemplate; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import software.amazon.awssdk.auth.credentials.AwsCredentials; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.sqs.SqsAsyncClient; + +@Configuration +public class SQSConfig { + + @Value("${spring.cloud.aws.credentials.access-key}") + private String AWS_ACCESS_KEY; + + @Value("${spring.cloud.aws.credentials.secret-key}") + private String AWS_SECRET_KEY; + + @Value("${spring.cloud.aws.region.static}") + private String AWS_REGION; + + @Bean + public SqsAsyncClient sqsAsyncClient() { + return SqsAsyncClient.builder() + .credentialsProvider(() -> new AwsCredentials() { + @Override + public String accessKeyId() { + return AWS_ACCESS_KEY; + } + + @Override + public String secretAccessKey() { + return AWS_SECRET_KEY; + } + }) + .region(Region.of(AWS_REGION)) + .build(); + } + + @Bean + public SqsTemplate sqsTemplate() { + return SqsTemplate.newTemplate(sqsAsyncClient()); + } +} diff --git a/src/main/java/io/sobok/SobokSobok/external/aws/sqs/SQSMessageSender.java b/src/main/java/io/sobok/SobokSobok/external/aws/sqs/SQSMessageSender.java new file mode 100644 index 0000000..82691b7 --- /dev/null +++ b/src/main/java/io/sobok/SobokSobok/external/aws/sqs/SQSMessageSender.java @@ -0,0 +1,26 @@ +package io.sobok.SobokSobok.external.aws.sqs; + +import io.awspring.cloud.sqs.operations.SendResult; +import io.awspring.cloud.sqs.operations.SqsTemplate; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import software.amazon.awssdk.services.sqs.SqsAsyncClient; + +@Component +public class SQSMessageSender { + + private final SqsTemplate queueMessagingTemplate; + + @Value("${spring.cloud.aws.sqs.name}") + private String QUEUE_NAME; + + public SQSMessageSender(SqsAsyncClient sqsAsyncClient) { + this.queueMessagingTemplate = SqsTemplate.newTemplate(sqsAsyncClient); + } + + public SendResult sendMessage(SQSPushNotificationRequest request) { + return queueMessagingTemplate.send(to -> to + .queue(QUEUE_NAME) + .payload(request)); + } +} diff --git a/src/main/java/io/sobok/SobokSobok/external/aws/sqs/SQSPushNotificationRequest.java b/src/main/java/io/sobok/SobokSobok/external/aws/sqs/SQSPushNotificationRequest.java new file mode 100644 index 0000000..0e630e4 --- /dev/null +++ b/src/main/java/io/sobok/SobokSobok/external/aws/sqs/SQSPushNotificationRequest.java @@ -0,0 +1,11 @@ +package io.sobok.SobokSobok.external.aws.sqs; + +public record SQSPushNotificationRequest( + + String deviceToken, + + String title, + + String content +) { +}