SendMessage
요청에 대한 응답 속에는 시스템이 부여한 해당 메시지의 id가 들어 있다. 이 id로 메시지를 식별할 수는 있지만 이것으로 메시지를 큐에서 삭제할 수는 없다.
메시지를 큐로부터 받을 때 대신 우리는 receipt handle이라는 것을 받는데 이것을 사용해서 메시지를
참고로 FIFO 큐를 사용하는 경우 컨슈머가 메시지를 처리하는데 오래 걸려서 Visibility Timeout을 높은 값으로 설정해두었다고 해보자. 이런 설정에서 컨슈머가 ReceiveMessage
액션을 시도한 후에 네트워크 문제가 생겨서 연결이 끊겼다고 하면 컨슈머가 메시지를 받지 못해서 에러가 발생할 것이다. 하지만 이미 Visibility Timeout이 시작되어 다시 재시도를 해도 메시지를 받을 순 없을 것인데, 그럼 다른 컨슈머가 다시 해당 메시지를 컨슘할 수 있을 때까지(=Visibility Timeout이 끝나기 전까지) 메시지 순서 보장을 위해 FIFO 큐가 정지된 상태로 남게 될 것이다.
만약 이것이 싫다면 ReceiveMessage
요청을 보낼 때 ReceiveRequestAttemptId를 설정해서 보내면 된다. 첫 번째 ReceiveMessage
요청 이후 5분 안으로 해당 첫 번째 요청과 동일한 ReceiveRequestAttemptId를 가진 ReceiveMessage
요청을 보낸다면 설사 Visibility Timeout 이전이라 하더라도 동일한 메시지들과 receipt handles를 받을 수 있다. 이러한 retry가 deduplication interval 안으로 발생한다면 그때마다 Visibility Timeout은 리셋된다.
하나의 메시지는 최대 10개까지의 Attribute를 가질 수 있고 각 Attribute에 사용자는 원하는 정보를 심을 수 있다. Attribute는 Message body와는 분리된 것으로 꼭 정보를 넣지 않아도 상관은 없다.
하나의 Attribute은
(Name) - (Type) - (Value)로 구성된다.
Type에는 String / Number / Binary가 들어갈 수 있다.
Attribute말고 System Attribute라는 것도 있는데 AWS X-Ray 등과 같은 다른 AWS 서비스에서 활용될 수 있도록 붙이는 메타데이터이다. (현재 유일하게 지원하는 System Attribute은 AWSTraceHeader이다.)