RabbitMQ
💡RabbitMQ 란?
- 데이터(메시지)를 송신자(프로듀서)로부터 수신자(컨슈머)에게 전달하는 중간 매개체 역할을 하는 메시지 브로커이다.
💡역할
- 비동기 처리 : 데이터를 비동기적으로 처리하여 시스템의 응답성을 높인다.
- 부하 분산 : 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산한다.
- 내결함성 : 메시지를 안전하게 저장하여 시스템 장애 시 데이터 손실을 방지한다.
💡기본 구성 요소
- 메시지(Message)
- RabbitMQ를 통해 전달되는 데이터 단위
- 예를 들어, 사용자 등록 정보나 주문 내역이 메시지가 될 수 있다.
- 프로듀서(Producer)
- 메시지를 생성하고 RabbitMQ에 보내는 역할
- 예를 들어, 웹 애플리케이션이 사용자 등록 정보를 RabbitMQ에 보내는 경우 프로듀서가 된다.
- 큐(Queue)
- 메시지를 저장하는 장소
- 메시지는 큐에 저장되었다가 소비자에게 전달된다.
- 큐는 FIFO(First In, First Out) 방식으로 메시지를 처리한다.
- 컨슈머(Consumer)
- 큐에서 메시지를 가져와 처리하는 역할
- 예를 들어, 이메일 발송 서비스가 큐에서 사용자 등록 정보를 가져와 환영 이메일을 보내는 경우 컨슈머가 된다.
- 익스체인지(Exchange)
- 메시지를 적절한 큐로 라우팅하는 역할 (중간에 거쳐가는 곳 정도로 일단 이해하기)
- 프로듀서는 메시지를 직접 큐에 보내지 않고, 익스체인지에 보내며, 익스체인지는 메시지를 적절한 큐로 전달한다.
RabbitMQ와 AMQP
💡AMQP 란?
- RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 사용한다.
- AMQP는 메시지 브로커를 위한 프로토콜로, 메시지의 생성, 전송, 큐잉, 라우팅 등을 표준화하여 메시지 브로커가 상호 운용될 수 있게 한다.
- 여기서 프로토콜(Protocol)은 컴퓨터 네트워크에서 데이터를 주고받기 위한 일련의 규칙과 절차를 말한다. 쉽게 말해, 컴퓨터나 장치들이 서로 통신할 때 어떻게 소통해야 하는지를 정해 놓은 약속이다.
💡AMQP 주요 개념
- 메시지(Message)
- 전송되는 데이터 단위
- 큐(Queue)
- 메시지를 저장하고 전달하는 구조
- 익스체인지(Exchange)
- 메시지를 큐로 라우팅하는 역할
- 바인딩(Binding)
- 익스체인지와 큐를 연결하는 설정
- 바인딩을 통해 메시지가 어느 큐로 전달될지 정의한다.
- 바인딩 이름과 큐의 이름은 일치시켜야 헷갈리지 않는다.
Exchange 유형
💡Exchange 란?
- 메시지 브로커가 메시지를 교환기에서 큐로 라우팅하는 방식
- 익스체인지는 다양한 방식으로 메시지를 라우팅할 수 있으며, 주로 메시지의 라우팅 키와 바인딩 키 또는 패턴을 기반으로 작동한다.
💡유형
- Direct Exchange
- 라우팅 키가 정확히 일치하는 큐로 메시지를 전달한다.
- 예를 들어, 라우팅 키가 error인 메시지는 error라는 바인딩 키를 가진 큐로 전달된다.
- 현업에서 가장 많이 사용된다.
- Topic Exchange
- 라우팅 키의 패턴을 사용하여 메시지를 라우팅합니다. 패턴에는 와일드카드 * (단어 하나)와 # (0개 이상의 단어)가 사용된다.
- 예를 들어, 라우팅 키가 quick.orange.rabbit인 메시지는 바인딩 키가 *.orange.*인 큐로 전달된다.
- Fanout Exchange
- 라우팅 키를 무시하고 교환기에 바인딩된 모든 큐로 메시지를 브로드캐스트한다.
- 모든 바인딩된 큐로 메시지가 전달된다.
- Headers Exchange
- 라우팅 키 대신 메시지의 헤더를 기반으로 메시지를 라우팅한다.
- 헤더 값과 바인딩된 헤더 값이 일치하는 큐로 메시지를 전달한다.
출처
https://teamsparta.notion.site/1-6-RabbitMQ-2242dc3ef514817d99e7c4362690564c
챕터1-6 : RabbitMQ | Notion
6.1 RabbitMQ란
teamsparta.notion.site
'심화 > MSA' 카테고리의 다른 글
| [MSA] Spring Cloud Config Client 동작 구조 (with Spring Docs) (0) | 2026.02.09 |
|---|---|
| [MSA] FeignClient vs WebClient (0) | 2025.11.21 |
| [대규모 스트림 처리] 수백만 명의 사용자가 동시에 접속하는 시스템을 어떻게 만들지? (0) | 2025.11.18 |
| [Zipkin] 분산 추적 시스템 (업데이트 중..) (0) | 2025.11.12 |
| [IntelliJ] DSM(Dependency Structure Matrix) (0) | 2025.11.06 |