ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Rabbit MQ
    ✉️ MQ 2023. 1. 4. 00:48

    Rabbit MQ 란 ❓


    💡 AMQP (Advanced Message Queing Protocol, MQ 표준 프로토콜)을 따르는 여러 오픈소스 메시지 브로커중 하나

    Producer 에서 Consumer로 메시지(요청)를 전달할 때 중간에서 브로커 역할을 한다.

     

    사용 케이스

    • 요청을 많은 사용자에게 전달
    • 요청에 대한 처리 시간이 길때
    • 많은 작업이 요청되어 처리를 해야할 때
    • 요청을 다른 API에게 위임하고 빠른 응답을 할 때

     

    메시지 브로커

    💡 메시지 브로커는
        - 클라우드 네이티브
        - 마이크로서비스 기반
        - 서버리스 및 하이브리드 클라우드 아키텍처
        를 지원하기 위한 공통 통합 메커니즘을 구축하는데 도움이 되는 애플리케이션간 통신 기술이다.
    • 메시지 브로커는 애플리케이션, 시스템 및 서비스가 서로 간에 통신하고 정보를 교환할 수 있도록 해주는 소프트웨어입니다
    • 정규 메시징 프로토콜 간에 메시지를 변환함으로 써 이를 수행

     

    메시지 브로커는 메시징 미들웨어 또는 MOM(메시지 지향 미들웨어) 솔루션 내의 소프트웨어 모듈이다.

    • 메시지를 검증, 저장, 라우팅하고 이를 적절한 대상에 전달
    • 다른 애플리케이션 간의 중개자 역할

     

    수신자가 활성인지에 대한 여부, 수신자의 수를 몰라도 송신자가 메시지를 발행할 수 있도록 허용한다.

    ⇒ 시스템 내에서 프로세스와 서비스의 디커플링이 용이

     

    메시지 브로커는 송신 서비스가 수신 서비스의 응답을 기다릴 필요가 없게 서비스 간의 비동기 통신이 가능하도록 한다.

     

    메시지 브로커 모델

    ✔️ 포인트-투-포인트 메시징

    • 메시지의 송신자와 수신자간에 일대일 관계를 지닌 메시지 대기열에서 사용하는 분배패턴
    • 큐의 각 메시지는 하나의 수신자에게 전송, 오직 한 번만 이용
    • 메시지가 한 번만 실행되어야 하는 경우 호출
      • ex) 급여 및 재무 트랜잭션

    ✔️ 발행 / 구독 메시징

    • 메시지의 생성자는 이를 토픽에 발행, 다수의 메시지 이용자는 해당 메시지를 수신하고자 하는 토픽을 구독한다.
    • 토픽에 대해 발행된 모든 메시지는 이를 구독한 모든 애플리케이션에 분배
    • 발행자와 이용자 사이에 일대다 관계가 있는 브로드캐스트 스타일의 분배 방법

     

    📌 구조 / 중요 개념


    📖 Message

    처리해야할 내용

     

    📖 Producer

    요청을 보내는 주체

    Producer는 message를 consumer에게 위임하기 위해 message를 exchange에 publish 한다.

    message를 보내는 일만 수행한다.

     

    📖 Consumer

    message를 producer로 부터 위임받아 처리한다.

     

    📖 Exchange

    producer에서 전달받은 message를 queue에 전달해준다.

    • 메시지를 어떤 queue에 추가할지?
    • 얼마나 추가할지?
    • 그냥 버려야할지?

    ⇒ exchange 규칙에 의해 결정

     

    exchange 여러 타입

    1. Fanout
      • exchange와 binding 된 모든 queue에 동일한 message를 보낸다.
    2. Direct
      • exchange와 message를 보낼 queue를 routing key를 통해 직접 선택해 binding할 수 있다.
      • 즉, 라우팅해서 보낼 수 있다.
    3. Topic
      • direct 타입보다 더 유연하게 binding 규칙을 정의할 수 있다.
      • direct 타입과 같은 routing key를 사용하되 topic 타입은 마침표로 구분되는 단어들을 사용
      • 문자열 내 *, # 를 삽입시켜 유연한 binding을 제공
        •  * - 단어 한개를 대체
        •  # - 0개 이상의 단어를 대체
        •  
    4. Headers
      • producer 측에서 정의된 header의 key-value 쌍과 consumer 측에서 정의된 argument의 key-value 쌍과 일치되면 binding 된다.
      • producer 측에서 정의하는 header는 message와 함께 publish 된다.
      • consumer 측에서는 exchange와 queue를 binding 하는 시점에 argument를 정의한다.

     

    📖 Queue

    Exchange는 producer로 부터 전달받은 message를 binding되는 queue들에게 동일하게 전달

    queue는 전달받은 message들을 연결된 consumer들에게 공평하게 Roud-Robin 스케줄링 방식으로 나누어 준다.

     

    📖 Binding

    Exchange 와 Queue의 관계

    • binding 되어야 exchange가 queue에게 message를 전달한다.

    보통은 사용자가 어느 exchange가 어느 queue를 binding할지 정의한다.

    • fanout - 예외

     

    참고자료

    https://www.rabbitmq.com/

    https://www.ibm.com/kr-ko/cloud/learn/message-brokers

    https://velog.io/@sdb016/RabbitMQ-기초-개념

    https://hwannny.tistory.com/82

    '✉️ MQ' 카테고리의 다른 글

    [RabbitMQ] 한 Queue에서 여러 타입의 Message 처리  (0) 2023.01.05
    RabbitMQ + Spring Boot(2)  (0) 2023.01.05
    Rabbit MQ + Spring Boot(1)  (1) 2023.01.04
    Message Queue 란❓  (0) 2023.01.04

    댓글

Designed by Tistory.