ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RabbitMQ
    연습장 2024. 8. 19. 13:50

      메시지 브로커. 메시지 브로커는 데이터(메시지)를 송신자(프로듀서)로부터 수신자(컨슈머)에게 전달하는 중간 매개체 역할을 한다. 

      RabbitMQ는 이러한 메시지를 큐(queue)에 저장하고, 필요할 때 적절한 수신자에게 전달한다.

     

    역할: 

      - 비동기 처리

      - 부하 분산

      - 내결함성

     

    기본 구성 요소

     

    기본 플로우는 프로듀서가 컨슈머에게 RabbitMQ를 통해서 메시지를 전달 

    근데 여기서 주의할 점.

    큐에 들어오고 나가는 순서는 보장이 된다.

    하지만, 큐에서 나가는 순서대로 처리 순서가 보장되지는 않음.

    컨슈머에서 처리하는 속도 등이 다를 수 있기 때문!!!(컨슈머가 여러 개 일 때!)

     

    그렇다면 위와 같은 상황에서 처리 순서를 보장하는 방법은?

     

     

     

    • 메시지: 데이터 단위
    • 프로듀서: 메시지를 생성해서 컨슈머에게 전달
    • 큐: 메시지를 저장하는 장소. RabbitMQ 안에 여러 개의 queue가 있음
    • 컨슈머: 메시지 받고 읽어서, 동작 처리
    • 익스체인지: 큐로 라우팅을 해주는 장치.. 그냥 중간에 거쳐가는 애라고 생각...! 프로듀서가 메시지를 발급하면, 익스체인지를 거쳐서 큐로 간다고 생각...!
      cf. 종류가 여러 개인데 현업에서는 direct exchange만 주로 많이 씀.

    AMQP(Advanced Message Queuing Protocol)

    메시지 브로커를 위한 프로토콜.

    cf. 프로토콜은 컴퓨터 네트워크에서 데이터를 주고 받기 위한 일련의 규칙과 절차. 약속.

    RabbitMQ는 AMQP를 구현한 메시지 브로커.

     

    주요 개념

    • 메시지
    • 큐
    • 익스체인지
    • 바인딩: 익스체인지와 큐를 연결하는 설정

    앞으로 큐의 이름과 바인딩의 이름은 반드시 통일!

     

     

    ---------------------------------------------------------------------------------------------------------

    궁금한 점이 생겼음

    메시지 브로커를 통해서 데이터가 전달된다고 했는데,

    이전에 FeignClient를 통해서 직접 호출해서 데이터를 전달 받았음.

    둘 다 데이터를 주고 받을 때 사용하는 것 같은데,,, 둘이 차이는??

     

    큰 차이는 FeignClient는 동기식, 메시지 브로커는 비동기식...

    그 외 많은 차이가 있음...

    비교 대상이 아님... 쓰임이 다름...!

    --------------------------------------------------------------------------------------------------------

    실습...

     

    OrderApplication -> 프로듀서

    QueueConfig에서 자동으로 Queue와 Exchange가 생성되도록

    QueueConfig에서
    큐 등록.

    exchange 등록.

    binding 등록.

     

    PaymentApplication -> 컨슈머

    @RabbitListener를 통해서 Queue를 바라보게 한 후

    Queue에 내용이 들어가 있으면 빠짐.

     

    productApplication -> 컨슈머

    paymentApp과 동일.

    여기서 ProductApp을 2개 이상 띄우면, 기본 설정인 라운드 로빈 방식에 따라 큐가 빠짐

    '연습장' 카테고리의 다른 글

    CSRF(Cross Site Request Forgery)  (0) 2024.08.20
    모니터링  (0) 2024.08.20
    모니터링과 로깅, 테스트와 배포  (0) 2024.08.17
    이벤트 소싱과 CQRS  (0) 2024.08.17
    데이터 일관성 유지  (0) 2024.08.17
Designed by Tistory.