ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [RabbitMQ] RabbitMQ란?
    데이터 엔지니어링/RabbitMQ 2022. 8. 23. 20:39
    반응형

    RabbiMQ란?

    rabbitMQ는 AMQP를 따르는 오픈소스 메시지 프로커 프로젝트이다. 메시지 브로커라고 불리며, 메세지를 많은 사용자에게 전달하거나, 요청에 대한 처리 시간이 길 때, 요청을 다른 API에게 위임하고 빠른 응답을 할 때 많이 사용한다.

    RabbitMQ vs Kafka

    대표적으로 메시지 전달 역할을 하는 것 중에 RabbitMq와 Kafka를 주로 언급이 되는데, RabbitMQ는 메시지 브로커이다. 메시지 브로커는 메시지를 전달하고 받으면 메시지를 보관하지 않고 삭제 된다. 그리고 많은 용량을 처리하지 못하지만 다양한 형태의 메시지 라우팅을 RabbitMQ 브로커 안에서 구성 할 수 있다. Kafka는 이벤트 브로커라고 하며, 메시지가 전달되었을 때 메시지를 정책 단위(30일까지보관한다.)로 저장하고 성능이 좋아 대용량을 처리량을 가진다. kafka는 그대신 라우팅을 브로커 안에서 하는것이 아니라 다른 외부에서 topic을 여러개 생성하여 라우팅 로직을 직접 짜서 사용해야 한다. 즉, RabbitMQ는 메시지를 조직적으로 라우팅하고 싶을 때, kafka는 대용량 처리 와 메시지 보관 등 빅데이터 처리에 적합하다.

     

    Core Concept

    RabbitMQ에서 중요한 컴포넌트는 producer, consumer, queue, Exchange, binding이다. Exchange 에서 먼저 queue를 받고 Exchange Type과 Binding 규칙에 따라 queue로 전달된다.

                              Broker
    Producers -> [Exchange -- Binding --> Queue] -> Consumers

    Core Concept Component

    • producer - 메세지를 생산하는 생산자
    • Exchange - 큐를 교환에 바인딩하기 위해 설정한 링크 이다.
    • Routing Key - 메시지를 큐로 라우팅하는 방법을 결정할 때 교환이 보는 메시지 속성
    • Binding - Exchange와 Queue를 연결해주는 역할
    • queue - 메시지를 최종적으로 담고 있는 역할 consumer가 요청시 메시지 전달
    • consumer - 메시를 받아 사용하는 역할

    Core Concept 데이터 흐름

    1. 생산자는 교환에 메시지를 게시
    2. Exchange는 메시지를 수신하고 메시지 라우팅을 담당
    3. Binding은 꼭 Queue와 Exchange를 꼭 설정을 해야함
    4. 메시지는 Consumer가 처리할 때 까지 대기열에 남아 있고
    5. Consumer가 메시지를 처리하면 삭제 됨

    Exchange 종류

    • Direct Exchange
      • 메세지 라우팅 키를 기반으로 큐에 메시지를 전달
      • Routing key exchange에서 메시지를 라우팅하는 결정하는데 사용하는 주소이다.

    • Topic Exchange
      • Routing Key 전체가 일치하거나 일부패턴이 일치하는 모든 Queue에 메시지가 전달 됨
      • Routing Key는 마침표(.)로 구분되는 단어 목록임
      • lazy.orange.cat 과 busy.orange.cat가 있다면 첫 번째 것은 Q1, Q2에 전달이 되며, 두 번째 것은 Orange만 해당 되므로 , Q1에만 전달 된다.
    • Fanout Exchange
      • Routing key 관계 없이 연결된 모든 Queue에 동일한 메시지 전달됨.
    • Header Exchange
      • 헤더 교환은 헤더와 선택적 값을 포함하는 인수를 기반으로 메시지를 라우팅을 함.
       

    Connection

    Application과 RabbitMQ Broker사이의 TCP연결할 때 사용한다.

    Channel

    Connection 내부에 정의된 가상의 연결, Queue에서 데이터를 손볼 때 생기는 통로 역할

    Routing Key 

    Binding에서 쓰이는 Value라고 생각하면 된다.

     

     

     

    참고 문헌 

    Part 4: RabbitMQ Exchanges, routing keys and bindings - CloudAMQP

     

    Part 4: RabbitMQ Exchanges, routing keys and bindings - CloudAMQP

    Learn about the different types of exchanges in RabbitMQ and scenarios for how and when you should use exchanges.

    www.cloudamqp.com

     

    반응형

    댓글

Designed by Tistory.