본문 바로가기

RabbitMQ

[RabbitMQ] RabbitMQ의 구조

반응형

RabbitMQ

  • AMQP(Advenced Message Queing Protocol)를 따르는 오픈소스 메시지 브로커.
  • 메세지를 많은 사용자에게 전달할 때,
  • 요청의 처리시간이 오래걸리거나 많을 때 다른 처리자에게 위임할 때,
  • 애플리케이션 간의 결합도를 낮출 때 사용한다.

 

구조

https://www.rabbitmq.com/tutorials/amqp-concepts.html

  • Publisher - message를 Exchange에 publish
  • Exchange - Binding이라는 규칙을 사용하여 message 복사본을 Queue에 배포
  • Queue - Consumer에게 message가 전달되기 전까지 보관, Round-Robin 스케쥴링 방식으로 공평하게 전달된다.
  • Consumer - Queue에 직접 접근하여 메세지를 수신

Exchange, Exchange Type

Exchange는 Publisher로 부터 메세지를 받아 0개 이상의 Queue로 라우팅한다. 사용되는 라우팅 알고리즘은 Binding 또는 Exchange Type 이라는 규칙에 따라 다르다.

규칙의 종류는 다음과 같다.

 

Direct exchange

  • 메세지 라우팅 키를 기반으로 키가 일치하는 Queue에 메세지를 전달한다.
  • 유니캐스트 라우팅에 이상적이다.

Direct exchange routing

동작 방식은 위 사진과 같이 메세지의 라우팅 키와 Queue가 Exchage로 바인딩한 라우팅 키가 같을 경우에 Queue로 메세지를 복사한다.

  1. 큐는 라우팅 키 K를 사용하여 교환기에 바인딩
  2. 라우팅 키 R이 있는 새 메시지가 직접 교환기에 도착하면 교환기는 K = R인 경우 대기열로 라우팅

Fanout Exchange

  • Exchange에 바인딩된 모든 Queue에 메세지를 복사하고 라우팅 키는 무시한다. 
  • 브로드캐스트 라우팅에 이상적이다.

Fanout exchange routing

Topic Exchange

  • 메세지의 라우팅 키와 Queue의 라우팅 키를 exchange에 바인딩하는데 사용된 패턴간의 일치를 기반으로 하나 이상의 Queue에 메세지 라우팅한다.
  • 멀티캐스트 라우팅에 이상적이다.

Headers Exchange

  • 라우팅 키를 무시하고 헤더값이 바인딩 시 지정한 값과 같으면 메세지를 바인딩한다.
  • 바인딩을 위해 두개 이상의 헤더를 사용할 수 있다.
  • x-match 값을 any로 설정하면 헤더 하나라도 같으면 바인딩 되고
  • x-match 값이 all일경우 모든 값이 일치해야 바인딩 된다.

 

 

참고

https://www.rabbitmq.com/tutorials/amqp-concepts.html

반응형