메시지 전달 구조
Producer로부터 메시지가 발행되면 Exchange에 전송되며, 여기에서 어떤 Queue에 라우팅 할 것인지 결정하게 됩니다. 그리고 라우팅 된 메시지는 Consumer가 가져가기 전까지 Queue에 잠시 대기하는 구조입니다.
- Producer가 메시지 발행
- 발행된 메시지를 Exchange에 전송
- Exchange에서 적절한 Queue로 메시지 라우팅
- Consumer가 메시지를 소비할 때까지 Queue에 대기
- Consumer가 메시지를 소비하면 Queue에서 해당 메시지 삭제
이 때 Queue에서의 메시지는 선입선출이 기본입니다. 만약 클라이언트의 부재 등으로 인해 소비되지 않고 있는 메시지가 있는 경우, 뒤에 남아있는 메시지도 모두 소비되지 않기 때문에 TIMEOUT을 설정하여 별도의 예외 처리 루틴을 거치도록 하는 것이 기본입니다.
Exchange의 종류
구분 | 설명 |
Direct Exchange | 메시지의 Routing Key와 정확히 일치하는 Queue로 라우팅 합니다. |
Topic Exchange | 특정 라우팅 패턴과 일치하는 Queue로 메시지를 라우팅 합니다. |
Fanout Exchange | 바인딩 된 모든 Queue에 메시지를 라우팅 합니다. |
Queue의 주요 속성
모든 큐는 한 번 결정된 속성을 변경할 수 없습니다. 만약 속성의 변경이 필요한 경우에는 해당 큐를 삭제한 후 다시 선언해야 합니다.
자동 삭제 큐
메시지 소비자의 연결이 모두 끊어지면 큐가 자동으로 삭제되도록 합니다. 큐에 읽지 않은 메시지가 있더라도 함께 삭제됩니다.
큐 독점 설정
단일 소비자만 큐의 메시지를 사용할 수 있도록 설정합니다. (소비자가 연결을 해제하면 큐는 자동으로 삭제됩니다.)
큐의 자동 만료
일정 기간 동안 사용하지 않은 큐를 삭제하는 기능입니다. 큐를 선언할 때 추가적인 인수를 전달해서 설정할 수 있으며, 모든 소비자의 연결이 종료되는 경우도 만료로 처리합니다. 또한, 소비자가 있더라도 TTL 지속시간 동안 Basic.Get 요청이 없으면 만료된 것으로 간주하며, 다른 일반적인 큐와 마찬가지로 큐의 만료시간(x-expires)은 다시 설정하거나 변경할 수 없습니다.
영구적인 큐
서버를 다시 시작한 후에도 유지되는 큐 입니다. 여러 소비자를 같은 큐에 연결한 후, 메시지 흐름이 동적으로 변경되지 않는 어플리케이션에서 사용할 때 유리합니다.
메시지의 자동 만료
메시지를 오랫동안 소비하지 않을 때 자동으로 삭제하는 기능입니다. 메시지 단위로 TTL 설정을 통해 서버 측에서 메시지의 최대 수명에 대한 제약 조건을 설정할 수 있습니다.
Dead Letter Exchange와 메시지 TTL이 모두 설정 되어있는 큐는 만료 시에 메시지를 Dead Letter로 간주하게 됩니다. 이 기능은 메시지가 금전적 가치가 있는 트랜잭션일 때 적용될 수 있습니다. 또한 실시간 대시보드에서 메시지를 자동으로 만료시키는 큐를 작성하여, 큐에서 수신 대기 중인 오래된 정보를 수신하는 것을 방지할 수도 있습니다.
제한된 수의 메시지 보관
R.MQ 3.1.0부터 지원하는 기능으로, 큐에서 보관하는 메시지의 최대 크기를 설정할 수 있습니다. 만약 대기 중인 메시지 수가 최대 크기에 도달하면 새로운 메시지가 추가될 때 가장 먼저 받은 메시지를 삭제하게 됩니다.
마찬가지로 선언 이후에 변경할 수 없으며, Dead Letter Exchange를 설정할 경우 맨 앞에서 제거된 메시지는 해당 Exchange로 이동하게 됩니다.
'구축 & 운영 > RabbitMQ' 카테고리의 다른 글
RabbitMQ - 메시지 속성 (0) | 2022.03.19 |
---|---|
Web STOMP 플러그인 설치 (0) | 2022.03.19 |
RabbitMQ 설치 (0) | 2022.03.19 |
메시지 브로커 비교 (Apache Kafks vs RabbitMQ vs ActiveMQ) (0) | 2022.03.08 |
ActiveMQ 조사 (0) | 2022.03.08 |