Hyun
Hyun
웹서비스 만들기를 좋아하는 개발자입니다.

Springboot Amazon SQS 연동시 메세지 무한 수신 문제 해결

Springboot 와 Amazon SQS 를 연동하여 단순하게 큐의 메세지를 읽어오는
테스트를 진행하였다.

1
2
3
4
@SqsListener(value = "${cloud.aws.sqs-url}", deletionPolicy = SqsMessageDeletionPolicy.ALWAYS) 
public void receiveMessage(String msg) throws Exception {
        log.info("SQS Message::: " + msg);
}

위처럼 큐에 메세지가 들어오면 위 메서드가 트리거되어 실행되는 구조이다.
deletionPolicy 는 삭제정책으로 메세지를 받으면 항상 삭제하도록 하였다.

AWS 콘솔을 통해 테스트로 하나의 메세지를 전송하였는데,
예상과는 다르게 같은 메세지를 계속 무한 수신하는 문제가 생겼다.

확인해보니, AWS 콘솔에서 큐를 구성할 때 첫번째 항목인
Default Visibility Timeout 값이 0으로 설정되어서 발생한 문제였다.

설명을 보면 다른 클라이언트에 표시되지 않는 시간 이라고 나오는데,
0으로 설정할 경우, 메세지를 삭제할 텀이 없어서 위와 같은 문제가 생기는 것 같았다.

AWS 콘솔 언어가 한국어로 설정되어있어서 정확한 번역이 되지 않아 혼동이 온 것 같다.
한글로는 기본 제한 시간 초과 로 번역되어 나와서 단순히 타임아웃 개념으로 생각해서
0으로 지정했던 거였는데.. 역시 원어로 보는게 혼동을 막을 수 있는 방법이 아닐까 싶다.