devOps · 2026-01-08 · 1분 읽기
메시지 브로커가 뭔데, RabbitMQ 이해하기
목차
- ›1. 메시지 브로커란?
- ›2. RabbitMQ 핵심 개념
- ›Exchange
- ›Queue
- ›Binding
- ›3. 기본 흐름
- ›4. Acknowledgement
1. 메시지 브로커란?
메시지 브로커는 **생산자(Producer)**와 소비자(Consumer) 사이에서 메시지를 중개하는 미들웨어다.
직접 통신 대신 브로커를 거치면:
- 생산자는 소비자의 상태를 신경 쓰지 않아도 된다
- 소비자가 처리 불가 상태여도 메시지가 유실되지 않는다
- 시스템 간 결합도를 낮출 수 있다
2. RabbitMQ 핵심 개념
Exchange
Producer가 메시지를 발행하는 곳. Exchange는 라우팅 규칙에 따라 Queue로 메시지를 전달한다.
| 타입 | 동작 |
|---|---|
| Direct | 라우팅 키가 정확히 일치하는 Queue로 전달 |
| Fanout | 연결된 모든 Queue로 브로드캐스트 |
| Topic | 패턴 매칭으로 Queue 선택 |
| Headers | 메시지 헤더 기반 라우팅 |
Queue
메시지가 쌓이는 공간. Consumer가 연결되어 메시지를 꺼내간다.
Binding
Exchange와 Queue를 연결하는 규칙.
3. 기본 흐름
Producer → Exchange → (Binding) → Queue → Consumer
// 메시지 발행 예시
rabbitTemplate.convertAndSend("my.exchange", "my.routing.key", message);
// 메시지 수신 예시
@RabbitListener(queues = "my.queue")
public void handleMessage(String message) {
System.out.println("Received: " + message);
}4. Acknowledgement
Consumer가 메시지를 받았다고 확인 응답을 보내야 Queue에서 메시지가 제거된다.
auto ack: 메시지를 전달하자마자 삭제 (유실 위험)manual ack: Consumer가 처리 완료 후 명시적으로 ack 전송
@RabbitListener(queues = "my.queue", ackMode = "MANUAL")
public void handleMessage(String message, Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG) long tag) throws Exception {
// 처리 로직
channel.basicAck(tag, false);
}'devOps 🚀' 카테고리의 다른 글
- 이 카테고리에 다른 글이 없습니다.