RabbitMQ 살펴보기 - Queue, Exchange, Message 처리

August 15, 2021

RabbitMQ 살펴보기 - Queue, Exchange, Message 처리

Queue 종류

자동삭제 큐

queue_auto_del

  • 소비자가 모두 제거(채널 종료)되면 큐도 삭제됨
  • 소비자의 수는 제한 없음


독점 큐

queue_monopoly

  • 소비자가 제거(채널 종료)되면 큐도 삭제됨
  • 단일 소비자만 허용


자동 만료 큐

queue_ttl

  • 큐가 미사용 상태(소비자가 없거나, 메세지 요청이 없는) 가 TTL 로 지정된 시간동안 지속되면 큐 삭제


영구적인 큐

queue_perm

  • Queue.Delete 명령 호출 전까지 유지됨
  • 서버 재시작시에도 메세지 유지됨
  • 메세지의 만료(x-message-ttl) 지정 가능
  • 메세지의 최대 보관 개수(x-max-length) 지정 가능



Exchange

Exchange 란?

  • 메세지 브로커에서 큐에 메세지를 전달하는 컴포넌트
  • 메세지 데이터/속성을 분석하여 메세지에 라우팅 동작을 정의할 수 있다.
  • RabbitMQ 내에 서로다른 라우팅 동작을 처리하는 여러 유형의 Exchange 가 존재
  • (플러그인을 사용해) 커스텀 Exchange 정의 가능


Exchange 유형 : exchange_type = direct

exchange_direct

  • routinng-key 에 바인딩된 모든 queue 에 메세지를 전달한다


Exchange 유형 : exchange_type = fanout

exchange_fanout

  • Exchange 에 바인딩된 모든 queue 에 메세지를 전달한다
  • routing-key를 확인할 필요가 없다 —> 성능 향상


Exchange 유형 : exchange_type = topic

exchange_topic

  • routing-key 에 매칭되는 패턴에 Bind 되어있는 큐로 메세지가 전송된다.


Exchange 유형 : exchange_type = x-consistent-hash

exchange_hash

  • 메세지의 routing-key 또는 ‘hash-header’ 로 지정된 header의 값을 hash 하여 여러 큐에 분산 (load-balance)
  • 큐에 가중치를 설정하여 load-balance 정도를 조절할 수 있음
  • RabbitMQ 에서 plugin 형식으로 배포되는 Exchange



Reject Message 처리

reject_msg_proc

  • requeue 플래그가 설정된 경우, 거부된 메세지가 다시 큐로 들어간다
  • x-dead-letter-exchange 가 설정되어있는 경우, 거부된 메세지는 dead letter exchange 로 라우팅되고, 연동된 큐로 들어가게 된다
  • (rpc 응답) Basic.Reject : 한번에 하나의 메세지만 거부 가능 (AMQP 스펙)
  • (rpc 응답) Basic.Nack : 한번에 여러 메세지 거부 가능