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으로 지정했던 거였는데.. 역시 원어로 보는게 혼동을 막을 수 있는 방법이 아닐까 싶다.