RabbitMQ 핵심 요소
요소설명
| Producer (생산자) | 메시지를 RabbitMQ에 전송하는 역할 (IP와 Port로 rabbitMQ 식별) |
| Exchange (교환기) | 메시지를 큐에 전달하는 역할 (Producer가 보낸 routing key로 Queue 맵핑) |
| Queue (큐) | 메시지가 저장되는 공간 ( Consumer가 ip,port, id, pw, virtualHost로 consumer로 등록) |
| Consumer (소비자) | 큐에서 메시지를 가져와 처리하는 역할 (Consume역할은 queue의 이름으로 맵핑하여 consume) |
. Exchange 유형
- Direct(자주사용) : 특정 Routing Key가 일치하는 Queue에만 메시지를 전달
- Routing key: "log.error" : Binding key: "log.error" → ✅ match
- Topic(자주사용) : 패턴 매칭을 이용해 특정 조건의 Queue로 메시지를 전달
- Routing key: "log.error.server1" : Binding key: "log.#" → ✅ match
- RabbitMQ's MQTT plugin
- Fanout(사용됨) : 모든 바인딩된 Queue에 메시지를 브로드캐스트 / 실시간 알림, 공지사항 전송
- Headers : 메시지의 Header 값을 기반으로 라우팅 / 특정 속성(type: json, format: utf-8)을 가진 메시지만 전달
RabbitMQ 메시지 흐름
- Producer: 메시지를 RabbitMQ로 보냄
- RabbitMQ : 메시지를 받아서, Exchange를 사용해서 적절한 Queue로 라우팅
- Consumer: 메시지를 받아서 비즈니스 로직 처리
RabbitMQ 서버가 모든 것을 관리하는 중앙 브로커 역할을 합니다. 즉, Exchange와 Queue는 RabbitMQ 서버 내부의 논리적인 개체이며 클러스터 환경에서는 여러 노드가 Queue(메타데이터와 메시지)를 공유·미러링할 수 있습니다.
RabbitMQ Broker설정
대부분의 RabbitMQ 시스템에서는 Exchange, Queue, Binding을 Producer가 직접 정의하지 않음.
이 작업은 운영 환경에서 Infrastructure 관리 주체 (DevOps, 관리자, 별도 설정 시스템) 가 수행하는 것이 일반적.
RabbitMQ Configuration 설정
간단한 개발코드에서는 Producer에서 RabbitMQ 설정을 담당하고, Consumer는 단순히 Queue를 리스닝(Listen)하는 구조를 갖을 수 있음. 실제 개발에서는 설정이 동적으로 변경되어서는 안되기때문에 DevOps/Admin이 RabbitMQ Management UI 또는 설정 파일 (rabbitmq.conf) 로 설정을 관리한다.
RabbitMQ의 핵심 개념
① Exchange(교환기) : 메시지를 적절한 Queue로 라우팅(Routing) 하는 역할. Exchange Type에 따라 메시지 분배 방식이 달라짐
- Exchange는 이벤트(Event) 개념으로 묶인다
② Queue(큐) : 메시지를 임시로 저장하는 공간, Consumer가 메시지를 가져가 처리하면 제거됨
- 큐는 이벤트에 맞는 액션(Action)으로 묶인다
③ Binding(바인딩) : Exchange와 Queue를 연결하는 설정, 어떤 Queue가 어떤 Exchange의 메시지를 받을지 정의
④ Routing Key(라우팅 키) : 특정 Queue로 메시지를 보내기 위한 라우팅 정보. Exchange에서 Routing Key를 기준으로 메시지를 배분
RabbitMQ Plugin
| 목적 | 사용하는 플러그인 |
| 웹 UI로 상태 확인 | rabbitmq_management |
| Prometheus/Grafana로 모니터링 | rabbitmq_prometheus |
| MQTT 장치 연동 | rabbitmq_mqtt, rabbitmq_web_mqtt |
| 다른 브로커로 메시지 복사 | rabbitmq_shovel, rabbitmq_federation |
| 딜레이 큐 기능 | rabbitmq_delayed_message_exchange |
| LDAP/OAuth 인증 연동 | rabbitmq_auth_backend_ldap, rabbitmq_auth_backend_oauth2 |
- RabbitMQ Management UI (HTML Web Interface) : 웹 기반 관리 UI (Management Plugin) 가 있어서, GUI로 설정을 직접 변경 가능.
- UI에서 할 수 있는 것
- Exchange, Queue 생성 및 삭제
- Binding 설정
- 현재 메시지 상태 확인
- Connected Clients 확인
- Message Rate 모니터링
- UI에서 할 수 있는 것
📌 RabbitMQ Management UI 활성화
- RabbitMQ Management Plugin 활성화:
rabbitmq-plugins enable rabbitmq_management
2. 웹 브라우저에서 접속:
http://localhost:15672
- Username: guest
- Password: guest
- (운영 환경에서는 보안상 변경해야 함)
RabbitMQ 설정 파일 (rabbitmq.conf)
운영 환경에서는 자동화 & 유지보수를 위해 UI보다는 rabbitmq.conf 또는 Docker 환경변수를 사용해서 CI/CD를 것이 더 좋음.
# 메시지 큐 설정
default_user = myuser
default_pass = mypassword
listeners.tcp.default = 5672
management.tcp.port = 15672
# 클러스터링 설정
cluster_formation.peer_discovery_backend = rabbit
Virtual Host (vhost)
in RabbitMQ is a logical namespace that isolates resources like queues, exchanges, and bindings. It allows multiple applications or tenants to use the same RabbitMQ instance without interfering with each othe
Why Use Virtual Hosts?
- Isolation → Different applications or teams can have separate RabbitMQ environments.
- Security → Each vhost can have different access controls (permissions for users).
- Multi-Tenancy → Multiple applications can share a single RabbitMQ instance without conflict.
Mosquitto
MQTT 프로토콜을 지원하는 오픈소스 메시지 브로커입니다. MQTT는 경량(가볍고 빠름), pub-sub 기반, 저전력 통신에 특화된 메시징 프로토콜이고, Mosquitto는 그 MQTT를 실제로 처리하는 중앙 서버(브로커) 역할을 합니다.
- -h: 브로커 주소
- -t: 토픽 (채널 이름)
- -m: 메시지
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT!"
- 실시간으로 test/topic에 메시지가 발행되면 수신됨
mosquitto_sub -h localhost -t "test/topic"
- 실시간으로 test/topic에 메시지가 발행되면 수신됨
'개발기술 > 통신 인터페이스, 프로토콜' 카테고리의 다른 글
| 장기연결 소켓통신 (1) | 2025.12.19 |
|---|---|
| Message Broker : Kafka (0) | 2025.11.27 |
| 응용계층 : HTTP와 그 외 (0) | 2025.08.22 |
| RabbitMQ : Java Client 통신구조 (1) | 2025.07.07 |
| 전송계층 : TCP와 UDP (0) | 2025.04.30 |