본문으로 바로가기

Rabbitmq 이해하기

category MQ 2023. 5. 11. 14:10
반응형

현재 사내에서 검색 엔진으로 Elasticsearch를 사용하고 있고 동적색인 메시지 브로커는 Rabbitmq를 사용하고 있습니다.

Rabbitmq와 다른 메시지 브로커와의 차이에 대해 작성하려고 합니다.

 

Rabbitmq가 포함되는 메시지 브로커에 대해 먼저 알아보겠습니다.

 

메시지 브로커 란

  • 서로 다른 시스템 내에서 각각의 구성 요소 간의 통신 및 메시지 교환을 용이하게 하는 소프트웨어 중개자.
  • Producer와 Consumer 간에 메시지를 보내고 받을 수 있는 중앙 허브 역할.
  • 메시지 브로커를 사용하는 이유는 Producer와 Consumer 애플리케이션을 분리하여 각자의 처리 속도로 독립적으로 작업할 수 있도록 하는 것.
  • 각각의 애플리케이션이 직접 통신하는 것보다 메시지 브로커를 사용하여 안정적인 비동기 메시지 전달을 보장받음.

 

Rabbitmq는 AMQP(Advanced Message Queueing Protocol) 표준 프로토콜을 구현한 메시지 브로커입니다.
*프로토콜 : 서로 다른 시스템 또는 구성 요소가 통신한고 정보를 교환하는 방법을 정의하는 일련의 규칙.

AMQP 구성 요소 흐름

https://m.blog.naver.com/neos_rtos/220937824768

1. Publisher Client는 Content를 Exchange에 보냅니다.
2. Exchange는 Routing Pattern, Key에 따라 Content를 적절한 Queue에 Binding 합니다.
3. Content는 Broker Server에 의해 Queue에 Routing 됩니다.
4. Queue에 가입한 Consumer는 처리를 위해 Queue에서 Content를 검색합니다.

*Binding = Exchange와 Queue 간의 연결

 

 

Rabbitmq와 Kafka 비교한 표입니다. (참조)

  RabbitMQ Kafka
성능 초당 4K-10K 메시지 초당 100만 메시지
메시지 보존 승인 기반
(처리되면 큐에서 제거)
정책 기반
(예: 30일)
데이터 형식 트랜잭션 운영
소비자 모드 Smart broker/Dumb consumer Dumb broker/Smart consumer
토폴로지 Exchange Type : Direct, fan-out, Topic, Header pub/sub 기반
페이로드 크기 제약 없음 기본 1MB 제한
접근 방법 push pull
메시지 우선 순위 제공 (우선 순위 큐 설정 가능) 없음
메시지 순서 제공 없음 제공

 

메시지 보존 승인 기반이란?

RabbitMQ는 메시지의 승인 처리를 기반으로 하는 메시지 처리 방식을 제공합니다. 이 기능을 통해 메시지를 안전하게 처리하고, 처리 중에 발생할 수 있는 장애 상황에 대처할 수 있습니다. 승인 기반의 메시지 처리는 다음과 같은 원칙에 따라 동작합니다


1. 메시지 수신 및 처리

- 소비자가 RabbitMQ에서 메시지를 받으면 RabbitMQ는 해당 메시지에 대한 승인 응답을 기다립니다.

 

2-1. 긍정 응답

- 소비자가 메시지를 처리한 후에는 RabbitMQ에게 긍정 응답(ack)을 보내야 합니다. 

- RabbitMQ는 해당 메시지를 안전하게 처리되었다고 판단하고 메시지를 삭제합니다.

 

2-2. 부정 응답

- 처리 기반에서는 소비자가 승인 응답을 보내지 않거나, 제때 도착하지 않는 경우에 RabbitMQ는 손실 방지를 위해 처리를 진행합니다.

* 일정시간은 Rabbitmq Server rabbitmq.conf 파일에서 수정 가능

# ms
consumer_timeout = 3600000

* 손실 방지

승인 응답을 보내지 안거나, 일정 시간 이후에도 응답을 주지 않는 경우 RabbitMQ는 해당 메시지를 Unacked상태로 간주 후 Ready 상태로 이동하여 처리하게 됩니다.

 

 

데이터 형식 트랜잭션?

RabbitMQ는 주문 형성 및 배치, 사용자 요청과 같은 트랜잭션 데이터에 적합하다.

 

 

소비자 모드?

Smart broker/Dumb consumer (똑똑한 브로커 / 멍청한 컨슈머) 

똑똑한 브로커는 메시지를 전달하고 지속적으로 소비자의 상태를 추적합니다.

멍청한 컨슈머는 메시지를 받아 처리하는 일만 합니다.

 

Smart broker/Dumb consumer는 RabbitMQ 디자인 패턴으로 브로커에 더 많은 역할과 책임을 부여하여 성능과 안정성을 향상하고 소비자는 단순히 메시지를 처리하기 위한 로직에만 집중할 수 있도록 합니다.

 

토폴로지 Exchange 4가지 유형

Direct Exchnage : Routing key와 일치하는 단일 Queue에 직접 전달. Routing key가 Queue의 Binding을 통해 Content(메시지)를 정확한 Queue로 전달.

 

Topic Exchange : Content(메시지)를 Routing Pattern과 일치하는 Queue로 전달.

 

Fanout Exchange : Content(메시지)를 Binding 된 모든 Queue에 브로드 캐스트를 함.

*브로드캐스트 = 메시지 하나를 여러 대상에게 동시에 전송하는 방식.

 

Header Exchange : Content(메시지)의 헤더 속성을 기반으로 큐로 메시지를 전달.(Content(메시지)의 메타데이터에 기반하여 Routing을 수행함.)

 

페이로드 크기

메시지 콘텐츠 크기. 기본으로 128KB로 설정되어 있으나. max_message_size로 설정 가능합니다.

 

접근 방법

브로커가 소비자에게 메시지를 push 해주는 방식입니다.

 

메시지 우선순위

우선순위 큐(Priority Queue)를 지정하여 사용 가능합니다.

 

메시지 입력할 때 priority 옵션을 주면 우선순위를 가지게 됩니다.

반응형