반응형
지난번 글에서 RabbitMq의 기본개념에 대해 알아보았다. 추상적으로 밖에 이해가 안가서 다시 여러 글을 읽고 Spring Java를 이용하여 구현하여 보았다.

지난번 포스트에서 추가로 부연된 설명을 하고자 한다.

보통의 웹 어플리케이션이 직접 서버로 연결한 서버-클라이언트 관계라면
메세지 큐를 중간에 위치시킴으로서 라우터 역할을 수행한다.

메세지큐에게 메세지 전송을 모두위임하고 애플리케이션과 서버는 느슨한 관계를 유지할 수 있다.

느슨하게 결합된 시스템 구성의 장점은

1) 발행자 또는 소비자 간 문제 발생 시 서로 영향을 주지 않는다.
2) 각 시스템의 성능은 다른 측면에 영향을 미치지 않는다.
3) 발행자와 소비자의 인스턴스 수는 작업량을 수용할 수 있을 만큼 독립적으로 증가하고 감소한다.
4) 발행자는 소비자의, 소비자는 발행자의 위치가 어디인지 혹은 어떤 기술을 사용하는지 알지 못한다.





AMQP(Advanced Message Queuing Protocol) : 시스템 간 메시지를 교환하기 위해 공개 표준으로 정의한 프로토콜
Broker : 발행자가 만든 메시지를 저장
Virtual host : Broker 내의 가상 영역
Connection : 발생자와 소비자, Broker 사이의 물리적인 연결
Channel : 발행자와 소비자, Broker 사이의 논리적인 연결, 하나의 Connection 내에 다수의 Channel 설정 가능
Exchange : 발행한 모든 메시지가 처음 도달하는 지점으로 메시지가 목적지에 도달할 수 있도록 라우팅 규칙 적용, 라우팅 규칙에는 direct, topic, fanout
Queue : 메시지가 소비되기 전 대기하고 있는 최종 지점으로 Exchange 라우팅 규칙에 의해 단일 메시지가 복사되거나 다수의 큐에 도달할 수 있다
Binding : Exchange 와 Queue 간의 가상 연결

AMQP 모델에는 메세지 확인 개념이 있다. 메세지가 소비자에게 전달되면 Broker에서 알린다. 메세지 확인이 되면 브로커는 큐에서 메세지를 완전히 제거. 

중요한 개념이 Exchange이다. 발행자에게 수신한 메세지를 큐에 적절히 분배하는 라우터 기능을 한다. 각 Exchange와 큐는 가상으로 연결되어있고 이 바인딩 규칙에 따라 큐에 라우팅하는데 그것이 바로 Exchange 타입이다.


지난번 post에서는 조금 어렵게 설명해놓았는데 Exchange type을 다시 설명하려고 한다.

1) Direct Type - 라우팅키와 바인딩키가 완벽하게 일치해야 하는경우 -- 경우에 따라서 멀티 바인딩도 가능하다.




2) Fanout Type - 바운딩되어있는 모든 큐에 메세지를 전송한다. 바인딩, 라우팅키에 상관없이 



3) Topic Type - *와 # 사용 , *는 한개의 단어만 가능 #은 여러개의 단어가 가능
에를들어 rabbit.orange.queue라는 키는 Q1에만 가능 - * 자리에 한개의 단어만 사용하므로
또한 lazy.a.b.c...는 Q2에 가능 - 여러개의 단어가 연이어나와도 #이면 가능하다








즉, Topic type은 *가 오느냐 #가 오느냐에 따라  Fanout Type이 될수도 있고  Direct Type이 될수도 있다.









참조 블로그에 더 자세하게 나와있다.
https://brunch.co.kr/@springboot/6


반응형

'개발공부 > RabbitMq' 카테고리의 다른 글

RabbitMQ 기본 개념, AMQP의 정의  (0) 2018.06.08

+ Recent posts