RabbitMQ는 Erlang으로 작성된 오픈소스 메시지 브로커다. AMQP(Advanced Message Queuing Protocol) 표준을 구현하며, 유연한 라우팅과 다양한 메시지 패턴을 지원한다.
핵심 개념
생산자 → [Exchange] → [Queue] → 소비자
Exchange 유형:
- Direct: 라우팅 키가 정확히 일치
- Fanout: 모든 바인딩된 큐에 전달 (브로드캐스트)
- Topic: 패턴 매칭 라우팅 (*.error, order.#)
- Headers: 헤더 기반 라우팅
python
import pika
# 연결 및 채널
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Exchange + Queue 설정
channel.exchange_declare(exchange='logs', exchange_type='fanout')
channel.queue_declare(queue='notifications', durable=True) # 내구성 큐
# 생산자
channel.basic_publish(
exchange='logs',
routing_key='',
body='{"event": "user_registered", "user_id": 123}',
properties=pika.BasicProperties(delivery_mode=2) # 메시지 지속
)
# 소비자 (ACK 패턴)
def callback(ch, method, properties, body):
process_event(body)
ch.basic_ack(delivery_tag=method.delivery_tag) # 처리 완료 확인
channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='notifications', on_message_callback=callback)
channel.start_consuming()
관련 개념
참고문헌
- •RabbitMQ 공식 문서: rabbitmq.com