SQS
Simple Queue Service
-
Queue
- 메시지를 담는 공간
- 리전 별로 생성해야 함
- HTTP 프로토콜을 이용해서 다른 리전끼리 메시지를 주고 받을 수 있음
- 큐 이름은 모든 리전에서 유일해야 함
- 큐에 담을 수 있는 메시지의 개수는 무제한
- 연속해서 30일 동안 아무 요청이 발생하지 않으면 AWS가 큐를 삭제
- 같은 리전 안에서의 데이터 전송은 무료
- 다른 리전에 있는 인스턴스와 메시지를 주고 받으면 데이터 요금이 과금
-
Message
- XML 또는 JSON 형태
- 최대 256KB
- 유니코드 문자 사용 가능
- 초 단위로 보관 기간 설정이 가능
- 고유한 ID가 부여됨
- 3~4KB의 메시지도 256KB로 책정 (과금)
- 용량이 작은 메시지를 처리하는 것 보다는 메시지를 모아서 Batch API로 처리하는 것이 요금 효율적
-
Batch API
- 한번에 최대 10개의 메시지(최대 256KB)를 동시에 처리
SQS Delay Queue
- Visibility timeout
- 메시지를 받은 뒤 특정 시간 동안 다른 곳에서 동일한 메시지를 다시 꺼내 볼 수 있게 또는 없게 하는 기능
- 큐 하나에 여러 서버에 메시지를 받을 때 동일한 메시지를 동시에 처리하는 것을 방지
- Message Avaliable (Visible)
- ⇒ 메시지를 꺼내서 볼 수 있는 상태의 메시지 개수
- Message in Fight (Not Visible)
- ⇒ 다른 곳에서 메시지를 보고 있어 현재 볼 수 없는 메시지의 개수
- Delay Delivery
- 특정 시간 동안 메시지를 맏지 못하게 하는 기능
- 지연되는 시간 동안에는 Message in Fight에 포함
- Dead Letter Queue
- 일반적으로 메시지를 받고 작업이 완료되면 메시지를 삭제
- 설정한 횟수를 초과하여 메시지를 받았는데 삭제되지 않고 남아 있으면 처리 실패 큐로 보냄
- 일반 큐 하나에 여러 처리 실패 큐를 연결할 수 있으며, 일반 큐와 처리 실패 큐는 같은 리전에 있어야 함
- Short Polling
- 메시지 받기 요청을 하면 결과를 바로 받음
- 메시지가 있으면 메시지를 가져오고 없으면 빠져 나옴
- ReceiveMessage 요청에서
WaitTimeSeconds를 0
으로 했을 때
- Queue 설정의
ReceiveMessageWaitTimeSeconds를 0
으로 했을 때
- Long Poling
- 메시지가 있으면 바로 가져오고 없으면 올 때까지 기다림
- 1초부터 20초까지 설정이 가능 (기본은 20초)
- ReceiveMessage 요청에서 WaitTimeSeconds를 0보다 크면 큐 설정의 ReceiveMessageWaitTimeSeconds 값 보다 우선으로 처리