Exchange 라우팅 패턴
-
RabbitMQ 최대 강점은 애플리케이션이 제공한 라우팅 정보를 기반으로 서로 다른 큐로 유연하게 라우팅 가능
-
RabbitMQ의 4가지 기본 유형의 익스체인지와 유형을 알아본다.
-
Direct Exchange
-
Fanout Exchange
-
Topic Exchange
-
Headers Exchange
Direct Exchange
- 다이렉트 익스체인지는 라우팅 키를 기반으로 메시지를 큐에 전달한다.
- 특정 큐에 메시지를 하나씩 전달한다.
- RabbitMq에 기본으로 내장돼 있어서 추가 플러그인이 필요하지 않다.(매우 단순함)
direct exchange 는 unicast routing 방식에 적합하다.. 여기서 unicast routing 이란....
고유 주소로 식별된 하나의 네트워크 목적지에 메시지를 전송하는 방식
참고 : https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BA%90%EC%8A%A4%ED%8A%B8
- 큐와 익스체인지가 routing key K를 이용해서 바인딩됨.
- 이때 새로운 메시지와 routing key R 이 도착하면 exchange는 K = R일 경우 큐로 라우팅 한다.
Direct exchanges는 다양한 소비자에게 일을 분배 하기 위해 사용된다.
중요!!! AMQP 0-9-1, 메시지가 queue가 아닌 cunsumer들 사이에서 로드 밸런싱 된다는 것.
Fanout Exchange
- 다이렉트 익스체인지와 달리 전체 큐를 대상으로 처리한다.
- Fanout Exchange로 발행된 메시지는 Fanout Exchange에 연결된 모든 큐에 전달된다.
- 라우팅 키를 평가할 필요가 없기 때문에 상당한 성능적인 이점이 있다.
스포츠 뉴스 사이트에서 모바일 클라이언트에게 실시간 점수를 업데이트할 수 있다.
글로벌 이벤트에 활용될 수 있다.
Topic Exchange
- Topic Exchange는 하나 이상의 큐에게 Routing key 패턴 기반으로 Queue에 binding 한다
- publish/subscribe pattern에 사용되거나 다양한 범위에서 사용된다.
- 주로 multicast routing에 사용된다.
예를 들어 image.new.profile, image.new.gallery, image.delete.profile이라는 라우팅 키가 있을때
image.new.# : image.new.profile, image.new.gallery
#.profile : image.new.profile, image.delete.profile
위와 같이 Routing key의 특정 파트에 맞게 메시지를 Routing 할 수 있다.
- 패턴 매칭을 사용하는 대신 전체 라우팅 키로 큐를 연결하면 된다.
- #을 라우팅 키로 큐에 연결하면 Fanout exchange와 같은 효과를 낼 수 있다.
Header Exchange
- 다양한 속성에서 라우팅 키보다 쉽게 사용하도록 디자인되었다.
- 메시지 속성 중 headers 테이블을 사용해 특정한 규칙의 라우팅을 처리한다.
- Queue.Bind 메소드의 인수로 x-match를 사용한다.
- x-match = any 일 경우 헤더 테이블 값 중 하나가 연결된 값 중 하나와 일치하면 메시지 전달
- x-match = all 일 경우 모든 값이 일치해야 메시지를 전달한다.
'개발' 카테고리의 다른 글
http 완벽 가이드 - URL 과 리소스 (0) | 2019.09.08 |
---|---|
AMQP 프로토콜의 메시지 소비 과정 (0) | 2019.04.24 |
AMQ 모델과 Exchange, Queue, Binding 에 대해 (0) | 2019.04.19 |
rabbitmq 를 왜 써야 하는지 (0) | 2019.04.18 |
vaadin 이란 (0) | 2019.03.04 |