-
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 여러 타입
- Fanout
- exchange와 binding 된 모든 queue에 동일한 message를 보낸다.
- Direct
- exchange와 message를 보낼 queue를 routing key를 통해 직접 선택해 binding할 수 있다.
- 즉, 라우팅해서 보낼 수 있다.
- Topic
- direct 타입보다 더 유연하게 binding 규칙을 정의할 수 있다.
- direct 타입과 같은 routing key를 사용하되 topic 타입은 마침표로 구분되는 단어들을 사용
- 문자열 내 *, # 를 삽입시켜 유연한 binding을 제공
- * - 단어 한개를 대체
- # - 0개 이상의 단어를 대체
- 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.ibm.com/kr-ko/cloud/learn/message-brokers
'✉️ 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