개발 공부 기록하기/03. AWS & Infra

[AWS SQS 들이파기] AWS SQS로 메시지 보내기 (Java + Gradle + Spring)

lannstark 2020. 9. 23. 20:23

SQS로 메시지를 보내는데 몇 가지 방법이 있을 것 같지만,
저는 Java Spring (boot) 개발자이니 해당 스택으로 SQS에 메시지를 쏴보겠습니다 ㅎㅎ

아하 생각해보니 새 PJ을 만들어야 하네요..! 모든 코드는 github에 있습니다.

1. 의존성 설정

plugins {
  id 'org.springframework.boot' version '2.3.3.RELEASE'
  id 'io.spring.dependency-management' version '1.0.10.RELEASE'
  id 'java'
}

group = 'com.lannstark'
version = '0.1.0'
sourceCompatibility = '11'

configurations {
  compileOnly {
    extendsFrom annotationProcessor
  }
}

repositories {
  mavenCentral()
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-messaging', version: '2.2.3.RELEASE'
  // Auto Configure 없으면 안된다..!! No bean of AmazonSQS 등과 같은 에러를 볼 수 있다.
  implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-autoconfigure', version: '2.2.3.RELEASE'

  compileOnly 'org.projectlombok:lombok'
  annotationProcessor 'org.projectlombok:lombok'

  testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
  }
}

test {
  useJUnitPlatform()
}

2. Controller, Service 간단하게 만들어보기

application.yml 설정

cloud:
  aws:
    region:
      static: ap-northeast-2
    stack:
      auto: false
@RequiredArgsConstructor
@RestController
public class MainController {

  private final SqsMessageSender messageSender;

  @PostMapping("/message")
  public void sendMessage(@RequestBody String message) {
    messageSender.sendMessage(message);
  }

}
@Service
public class SqsMessageSender {

  private final QueueMessagingTemplate queueMessagingTemplate;

  @Autowired
  public SqsMessageSender(AmazonSQS amazonSqs) {
    this.queueMessagingTemplate = new QueueMessagingTemplate((AmazonSQSAsync) amazonSqs);
  }

  public void sendMessage(String message) {
    Message<String> newMessage = MessageBuilder.withPayload(message).build();
    queueMessagingTemplate.send("sqs-study", newMessage);
  }

}

spring-cloud-aws를 이용하면 QueueMessagingTemplate을 이용하여 SQS에 메시지를 보낼 수 있습니다.
SqsMessageSender가 해주는 역할은 간단합니다. 문자열을 받아서 sqs-study 라는 Queue로 전송합니다.

우선 로컬에서 실행해보면... 몇 가지 에러가 나올 수 있는데요, 에러들의 해결방법은 여기에 별도로 정리해 두었습니다.
POST MAN으로 메시지를 보내보니 성공했습니다!! 와!!

@RequestBody 문자열 에는 해당 JSON 문자열이 그대로 들어가게 되고, AWS SQS 콘솔에서 들어가 있는 메시지를 확인할 수 있습니다.

 

메시지 전송 및 수신을 눌러 다음 페이지로 들어간 다음,

메시지 폴링을 누르면 아래 하나의 메시지가 나옵니다.

 

세부 정보 보기 또는 파란색으로 되어 있는 ID를 누르면, 아래와 같이 자세한 정보를 확인할 수 있습니다.

선택 후 삭제하면 Qeue에서 제거됩니다.

깨끗~ ㅎㅎㅎ...

SqsMessageSender에 존재하는 @Autowired가 무척이나 거슬리긴 하지만 연습이니까 넘어가도록 하겠습니다..... ㅎ...

 

전체 시리즈 보러가기 : lannstark.tistory.com/88

 

AWS SQS 들이파기

안녕하세요~~ 여러분~! 공부하는개발자 입니다 ㅎㅎㅎ 이번 시간에는 바로바로~ SQS에 대해서 알아보려고 합니다. SQS란 무엇인지, Java + Spring으로 어떻게 사용할 수 있는지, 사용시 주의할 점 등은

lannstark.tistory.com