RabbitMQ란?
728x90

정의

AMQP를 구현한 오픈소스 메시지 브로커

 

특징

  1. 신뢰성
    안정성, 영속성, 메시지 도착 유무 확인, 고가용성
  2. 유연한 라우팅
    메시지는 큐에 도착하기 전에 exchange를 통해 라우트 된다. 여러가지 exchange 타입이 존재.
  3. 클러스터링
    지역 네트워크 상에서 여러개의 RabbitMQ 서버들이 함께 클러스터링 되어 단일한 논리적 브로커를 생성
  4. 고가용 큐
    큐는 클러스터내의 여러 머신들에 걸쳐 복제될 수 있는데, 이는 하드웨어 결함시에 메시지의 안전을 보장한다.
  5. 관리 UI
    관리가 가능한 UI를 제공한다.

흐름

 

Producer와 Consumer의 결합이 느슨해진 것을 볼 수 있다. 각자의 역할만 하면 되기 때문이다.

Producer가 메시지를 보내고 Exchange가 받아서 바인딩 된 Queue에 적재, 그 후에 Consumer가 Queue에 적재된 메시지를 가져가는 흐름이다.

 

사용 예시

나는 이 사용 예시를 고민을 많이 했었다. 다른 블로그를 봐도 확실하게 나오는 것도 없었다.

 

그리고 전 회사에서 RabbitMQ를 사용하는데 메시징 서비스를 주로 하는 곳이라 RabbitMQ는 무조건 메시지를 보내는 것(?)이라는 오해를 했었다.

 

하지만 저 구조를 보면서 사람들이 자꾸 분리되었다. pub-sub을 계속 말하는 것에 관점을 두고 생각을 해보았다.

 

RabbitMQ는 규모가 큰 서비스에서 각각의 서비스의 분리를 하는 거라고 이해를  했다.

 

예를 들어 사용자가 마켓이라는 플랫폼에서 상품을 주문하는 상황에서 사용자가 주문을 요청했다고 하면

 

원래 기존의 어플리케이션에는 주문등록완료 -> DB작업 -> 결과리턴 이런식으로 DB까지 거치게 된다.

 

이런 상황에서 DB 서버가 문제가 생기는 경우에는 아무것도 되지 않는 상황이 발생한다.

 

그래서 여기서 RabbitMQ를 사용하게 되면 사용자가 주문버튼을 눌렀을때 바로 주문 완료라는 문구를 보여주면서 다른 화면으로 이동.

 

메시지 브로커를 활용하여 판매업체로부터 주문등록이 완료되었다는 응답을 받은 후에 메시지만 발행해주면 주문 관련 DB작업을 수행하는 것을 기다리지 않고 바로 사용자에게 완료되었다는 응답을 전해줄 수 있다.

 

이렇게 서비스간의 분리를 위해 사용된다는 것을 알 수 있다...

728x90