RabbitMQ 란?
- RabbitMQ는 메시지 브로커이다. 메시지 브로커는 메시지를 프로듀서로부터 컨슈머에게 전달하는 중간 매개체 역할을 한다.
- 메시지를 Queue에 저장하고 필요할 때 적절한 수신자에게 전달
역할
- 비동기 처리 : 데이터를 비동기 처리하여 시스템의 응답성을 높임
- 부하 분산 : 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산
- 내결함성 : 메시지를 안전하게 저장하여 시스템 장애 시 데이터 손실을 방지
장단점
장점
- 신뢰성
- 메시지 지속성 : 메시지를 디스크에 저장하여 장애 발생 시 메시지 손실 방지
- 확인 메커니즘 : 메시지 전달을 확인하는 ACK 메커니즘 지원
- 유연성
- 메시지 패턴 : 다양한 메시지 전달 패턴 (단일 소비자, 다중 소비자, 라운드로빈, 팬아웃, 주제 기반) 지원
- 프로토콜 지원 : 기본적으로 AMQP 사용하지만 STOMP, MQTT 등 다양한 프로토콜 지원
- 확장성
- 클러스터링 : 클러스터링을 통해 높은 가용성과 부하 분산 제공
- 분산 아키텍처 : 페더레이션 및 셰어드 노딩을 통해 분산 메시징 시스템 구축
- 관리 및 모니터링
- 웹 기반 관리 인터페이스로 쉽게 관리
- 다양한 플러그인 시스템
- 성능
- 높은 처리량 : 높은 메시지 처리량을 제공하여 대규모 애플리케이션에 효과적
단점
- 설정 및 운영 복잡성
- 초기 설정이 다소 복잡할 수 있고, 클러스터링 및 분산 환경에서는 더욱 많은 설정이 필요
- 성능 문제
- 메시지 브로커 오버헤드 : 모든 메시지를 중앙 브로커를 통해 전달하기 때문에 높은 트래픽 상황에서는 브로커의 오버헤드가 발생할 수 있음
- 운영 비용
- RabbitMQ는 메모리와 CPU 자원을 많이 소비할 수 있음
- 모니터링 및 유지보수
- 지속적인 모니터링과 유지보수가 필요하며, 이를 위해 추가적인 인력과 비용 발생
- 제한된 크기
- 메세지 크기 제한 : 매우 큰 메시지 처리에는 제한이 있을 수 있음
- 러닝 커브
구성 요소
Message
- 메시지는 RabbitMQ를 통해 전달되는 데이터 단위
Producer
- 메시지를 생성하고 RabbitMQ에 보내는 역할
Queue
- 메시지를 저장하는 장소
- 메시지는 큐에 저장되었다가 컨슈머에게 전달
Consumer
Exchange
- 메시지를 적절한 큐로 라우팅하는 역할
- 프로듀서는 메시지를 직접 큐에 보내지 않고 익스체인지에 보내며, 익스체인지는 메시지를 적절한 큐로 전달
AMQP
- AMQP는 메시지 브로커를 위한 프로토콜로 메시지의 생성, 전송, 큐일, 라우팅 등을 표준화하여 메시지 브로커가 상호 운영될 수 있게 한다.