RabbitMQ
🐇 RabbitMQ란?
정의
RabbitMQ는 메시지를 중간에 저장하고 전달하는 메시지 브로커이다. Producer와 Consumer를 분리해 비동기 처리와 작업 분산을 쉽게 만든다.
🎯 사용하는 이유
- 작업을 비동기로 분리한다.
- Producer와 Consumer의 결합도를 낮춘다.
- 메시지 전달을 안정적으로 관리한다.
- 큐 기반 작업 처리를 쉽게 만든다.
포인트
RabbitMQ는 메시지 라우팅과 전달에 강한 큐 브로커다.
🧱 주요 구성 요소
- Producer
- Exchange
- Queue
- Binding
- Routing Key
- Consumer
🔄 동작 흐름
- Producer가 메시지를 Exchange로 보낸다.
- Exchange가 Routing Key를 기준으로 Queue에 전달한다.
- Queue가 메시지를 저장한다.
- Consumer가 Queue에서 메시지를 가져간다.
- 처리 완료 후 ACK를 보낸다.
🧩 Exchange 종류
| 종류 | 설명 |
|---|---|
| Direct | Routing Key가 정확히 일치할 때 전달 |
| Topic | 패턴 기반 라우팅 |
| Fanout | 모든 Queue로 브로드캐스트 |
| Headers | 헤더 값 기준 라우팅 |
🛠️ Spring AMQP 예시
Gradle 의존성
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-amqp'
}
Producer
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(String exchange, String routingKey, String message) {
rabbitTemplate.convertAndSend(exchange, routingKey, message);
}
Consumer
@RabbitListener(queues = "myQueue")
public void receive(String message) {
System.out.println("Received: " + message);
}
⚖️ RabbitMQ와 Kafka 차이
| 항목 | RabbitMQ | Kafka |
|---|---|---|
| 목적 | 메시지 라우팅/큐 처리 | 이벤트 스트림 처리 |
| 처리 방식 | 주로 Push | 주로 Pull |
| 강점 | 유연한 라우팅 | 대용량 스트림 |
⚠️ 주의할 점
- ACK 정책을 명확히 해야 한다.
- 메시지 중복 가능성을 고려해야 한다.
- Dead Letter Queue 같은 실패 처리 전략이 필요할 수 있다.
- Queue와 Exchange 설계를 먼저 정리해야 한다.
[!important] 정리 RabbitMQ는 메시지 전달과 라우팅을 유연하게 다루는 대표적인 메시지 브로커다. 비동기 작업 분리와 이벤트 전달 구조를 만들 때 유용하다.
댓글남기기