[Road To MQ] RabbitMQ 기본 개념

CodeKong의 기술 블로그·2024년 1월 25일
3

Road To MQ

목록 보기
3/6
post-thumbnail

안녕하세요 오늘은 Road To MQ 세 번째 아티클인 RabbitMQ 기본 개념입니다!

이제 RabbitMQ, Redis, kafka 등 외부 브로커들을 다루게 되었네요!!

📌 배경

문제점

  1. 기존에 작성하였던 문제는 데이터가 객체와 1:1로 이루어져 있다는 점이였습니다.
    이 점은 기존 https://velog.io/@joonoo3/Road-To-MQ-WebSocket-STOMP로-실시간-통신 글 등에서 정리해 놨습니다! 느슨한결합 등이 있죠

  2. STOMP를 이용한 MQ방식은 한 가지 문제점이 있습니다.

    저번 글에서도 있었던 메세징 방식입니다. 하지만 서버 한 대로는 수많은 메세징을 할 수 없습니다. 또한 MSA가 디폴트인 요즘 한 서버에서 모든 일을 처리하지 않죠.

바로 여기서 문제가 발생합니다


이와 같이 같은 구독을 하는 subscriber들이 server1,2에 나눠 접근했지만
publisher가 server1에만 접근해 발행하는 경우 server2에 있는 구독자들은 발행자가 발행을 해도 메세지를 받지 못합니다.

이 때 외부 메세지 브로커를 사용하게 됩니다.


📌 외부 Message Broker 기본 이론


https://docs.spring.io/spring-framework/reference/web/websocket/stomp/message-flow.html 두 그림은 Spring DOCS STOMP 탭에 있는 그림입니다.

차이는 SimpleBroker vs StompBrokerRelay 의 차이인데요

TCP 방식으로 외부 메세지 브로커와 통신하여 메세지 발행/수신을 진행한다는 것을 알 수 있습니다.


📌 RabbitMQ 기본 이론

RabbitMQ에는 4가지 중요 개념이 필요합니다.

  1. publisher : 이전 개념의 발행자입니다. 메세지를 발행(전송) 합니다.
  2. consumer : 이전 개념의 구독자입니다. 메세지를 수신합니다

3. exchange : publisher가 발행한 메세지들을 받습니다. 이어서 해당 exchange에 연결된 queue 중 어느 queue에 전송할지 type에 따라 결정합니다.

  1. queue : exchange가 결정에 따라 전달해준 메세지들을 보관합니다.

✅ Exchange의 Type

Exchange는 총 4가지의 Type을 갖습니다.

1.Direct

direct는 라우팅 키와 맞는 queue로 메세지를 전송합니다.

라우팅 키가 keroro인 queue에 연결된 consumer에게만 메세지가 전달된다.

2.Topic

Topic에는 패턴이 적용되어 라우팅 키의 패턴에 맞는 queue로 메세지를 전송합니다
옵션으로 *(1개), #(0개 이상)이 있습니다.

~roro인 queue에 연결된 consumer에게만 메세지가 전달된다.

3.Header

Header는 요청한 헤더와 맞는 queue로 메세지를 전송합니다.
옵션으로는 x-match = all(모든 헤더 일치), x-match = any(하나라도 일치)가 있다 .

헤더가 모두 일치하는 queue에만 전달된다

헤더가 하나라도 일치하는 queue에 모두 전달된다

4.Fanout

Fanout은 해당 Exchange에 연결된 모든 queue에 메세지를 전달하며 이 때 라우팅 키는 사용되지 않습니다.

Exchange와 연결된 모든 queue에 전달된다.

구현은 다음글에서 볼 수 있습니다!🔫🔫

0개의 댓글