개발노트

1. [RabbitMQ] Producer, Consumer 개념 본문

서버 개발/RabbitMQ

1. [RabbitMQ] Producer, Consumer 개념

mroh1226 2024. 11. 7. 21:40
반응형

 

메시지 큐 흐름도

  1. ClientProducer : 메시지 요청
  2. Producer Exchange (Routing Key 사용) → Queue (Binding Key 기준 라우팅)
  3. QueueConsumer (라운드 로빈으로 분배)
  4. Consumer: 메시지 처리 후 ACK 전송

기본 개념 정리

  1. Exchange (교환기):
    • Producer 가 발행한 메시지를 어느 큐로 전달할지 결정하는 역할을 합니다.
    • Exchange는 메시지를 받아 특정 조건에 따라 큐로 메시지를 라우팅합니다.
    • RabbitMQ에서는 여러 유형의 Exchange가 있으며, 가장 일반적인 유형은 다음과 같습니다:
      • Direct Exchange: 특정 Routing Key를 가진 메시지를 해당 키와 일치하는 큐에 전달합니다.
      • Topic Exchange: 패턴을 사용해 라우팅을 하며, 특정 주제와 연관된 메시지를 여러 큐로 전달합니다.
      • Fanout Exchange: 라우팅 키 없이 모든 연결된 큐에 메시지를 브로드캐스팅합니다.
      • Headers Exchange: 메시지의 헤더를 기반으로 라우팅합니다.
  2. Routing Key (라우팅 키):
    • Producer 가 메시지를 Exchange에 보낼 때 지정하는 키로, 메시지가 어떤 큐로 가야 하는지 결정하는 데 사용됩니다.
    • 특정 큐와 연결된 Routing Key가 Exchange의 라우팅 기준이 됩니다.
  3. Binding Key (바인딩 키):
    • 큐와 Exchange 사이를 연결하는 키로, Exchange에서 특정 Routing Key를 가진 메시지를 받아야 할 큐를 정의합니다.
    • Binding Key와 Routing Key가 일치할 때 메시지가 해당 큐로 전달됩니다.

상세 메시지 흐름

  1. 클라이언트(Client)가 Producer  에게 메시지 요청
    • 클라이언트가 Producer  에게 작업 요청을 합니다. Producer  는 요청을 받아 메시지를 생성하고 Exchange로 전송할 준비를 합니다.
  2. Producer  가 Exchange로 메시지 발행 및 라우팅 (Routing Key 포함)
    • Producer  는 메시지를 특정 Routing Key와 함께 Exchange에 발행합니다.
    • 예를 들어, Routing Key가 task.queue1이라면, 이 키를 Exchange에 전달하여 특정 큐로 라우팅하도록 합니다.
  3. Exchange가 Binding Key를 기반으로 메시지를 큐로 전달
    • Exchange는 지정된 Routing Key를 보고, Binding Key와 일치하는 큐에 메시지를 전달합니다.
    • Direct Exchange에서 task.queue1이라는 Routing Key를 가진 메시지는 동일한 Binding Key를 가진 큐로만 전달됩니다.
    • Topic Exchange를 사용하면 task.*와 같은 패턴으로 여러 큐로 메시지를 보낼 수 있습니다.
  4. Consumer가 큐에서 메시지를 수신 (라운드 로빈 분배)
    • 여러 Consumer가 동일한 큐를 구독하는 경우, RabbitMQ는 기본적으로 라운드 로빈 방식으로 메시지를 분배합니다. 즉, 첫 번째 메시지는 첫 번째 Consumer에게, 두 번째 메시지는 두 번째 Consumer에게 전달됩니다.
    • 이 방식으로 각 Consumer는 고르게 메시지를 수신하게 됩니다.
  5. Consumer가 메시지를 처리하고 Acknowledgement (ACK) 전송
    • Consumer가 메시지를 정상적으로 처리한 후, RabbitMQ에 ACK를 전송합니다.
    • ACK는 RabbitMQ에게 해당 메시지가 성공적으로 처리되었음을 알리는 역할을 하며, 이를 통해 메시지가 안전하게 큐에서 삭제될 수 있습니다.
    • 만약 Consumer가 메시지 처리를 완료하지 못하고 실패하면, RabbitMQ는 ACK를 받지 못하므로 해당 메시지를 다른 Consumer에게 다시 전달하거나 큐에 남겨두게 됩니다.
  6. Message Acknowledgement (메시지 확인)
    • RabbitMQ는 기본적으로 Consumer에게 ACK가 도착할 때까지 메시지를 큐에 유지합니다.
    • 이 기능을 통해 Consumer가 메시지 처리 중 장애가 발생할 경우, 메시지 손실을 방지하고 다른 Consumer에게 재처리를 위임할 수 있습니다.
반응형
Comments