본문 바로가기
AWS

[AWS] SQS 사용하기

by meetyou 2023. 2. 14.

이번에는 SQS를 사용하는 방법을 알아보겠습니다.

 

1. 의존성 추가

build.gradle에 아래의 내용을 추가해준다.

// 클라우드 사용을 위한 의존성 추가
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-aws', version: '2.2.1.RELEASE'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-messaging', version: '2.2.3.RELEASE'
// Auto Configure 없으면 안된다
implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-autoconfigure', version: '2.2.3.RELEASE'

 

2. config 설정

public class AmazonSqsConfig {
 
 	// aws access-key
    @Value("${cloud.aws.credentials.access-key}")
    private String accessKey;

 	// aws secret-key
    @Value("${cloud.aws.credentials.secret-key}")
    private String secretKey;

	// sqs 리전 정보
    @Value("${cloud.aws.region.static}")
    private String region;
    
    // sqs 접근을 위한 위한 사용자 bean 설정
    @Primary
	@Bean
    public AmazonSQSAsync amazonSQSAws() {
        BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
        return AmazonSQSAsyncClientBuilder.standard()
                .withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                .build();
    }	
    
}

 

3. service 클래스 생성

public class MainService {

    // sqs에 저장한 이름
    @Value("${cloud.aws.sqs.name}")
    private String sqsName;

    private final QueueMessagingTemplate queueMessagingTemplate;

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

    // 저장한 메세지(=유저 정보) 가져오기
    public void getUserMessage() {

        // 여러 정보가 있어서 선입선출로 인하여 제일 먼저 넣었던 메세지를 꺼내오고, 그 메세지를 삭제한다.
        UserDto userDto = queueMessagingTemplate.receiveAndConvert(sqsName, UserDto.class);
        System.out.println("SQS로부터 받은 메시지 : " + userDto.toString());

    }
	
    // 메세지 저장
    public void sendMessage(UserDto userDto) {
        log.info("SQS에 메세지 저장");
        queueMessagingTemplate.convertAndSend(sqsName, userDto); // 저장할 큐 이름, 메세지
    }

}