Rabbit MQ

2020. 5. 13. 16:45기타

1. Rabbit MQ란

 Rabbit MQ란 AMQP를 구현한 메시지 브로커입니다. AMQP라는 표준 MQ 프로토콜로 만들어져 있고 Cluster 구성이 쉽고 Manage UI가 제공되며 무엇보다 성능이 뛰어나다고 알려져 있습니다. 또한 다양한 plugin도 제공되어 확장성이 뛰어나며 Spring에서도 AMQP 연동 라이브러리가 제공되어 편리하게 연동하여 사용이 가능합니다.

특징

  • ISO 표준 AMQP 구현
  • 비동기 처리를 위한 메시지 큐 브로커
  • Erlang과 java언어로 만들어짐
  • 분산 처리를 고려한 메시지 큐
  • 고가용성 보장
  • Pub/Sub 모델 형식
  • 다양한 plugin 지원

주요 옹어

  • Producer: 메시지를 보내는 Application
  • Publish: Producer가 메시지를 보냄
  • Queue: 메시지를 저장하는 버퍼
  • Consumer: 메시지를 받는 User Application
  • Exchange: Producer가 전달한 메시지를 Queue에 전달하는 역할. 메시지가 직접 Queue에 전달되지 않고 exchange type 정의대로 동작
  • Exchange type: 동작 방식
    • Fanout: 알려진 모든 Queue에 메시지를 전달
    • Direct: 지정된 Routing Key를 가진 Queue에만 메시지를 전달
    • Topic: 지정된 패턴 바인딩 형태에 일치하는 Queue에만 메시지를 전달
    • Header: 헤더에 포함된 key=value의 일치조건에 따라서 메시지 전달
  • Bindings: Exchange와 Queue를 연결해 주는 것
  • Routing: Exchange가 Queue에 메시지를 전달하는 과정
  • Routing Key: Exchange와 Queue가 Binding될 때, Exchange가 Queue에 메시지를 전달하는 기준

2. Rabbit MQ의 메시지 분배

Round-Robin Dispatching

 Rabbit MQ는 Consumer가 병렬처리를 쉽게 할 수 있도록 같은 Queue를 바라보고 있는 Consumer에게 메시지를 균등 분배합니다. 이로 인해 메시지를 받아 처리하는 프로그램들은 수평 확장이 가능합니다. 물론 Producer도 같은 Queue에 메시지를 던져주는 방식으로 수평 확장이 가능합니다.

Fair Dispatch

 여러 Consumer에게 Round Robin할 때, 번갈아가면서 메시지를 전달하지만 완전히 공평하지는 않습니다. 그래서 busy한 서버에게 메시지를 계속 전달하지 않도록 prefetchCount라는 개념을 사용합니다. prefetchCount가 1일 때는 아직 ack를 받지 못한 메시지가 1개라도 있으면 다시 그 consumer에게 메시지를 할당하지 않습니다.

Acknowledgment

 많은 프로토콜들이 메시지 전달 보장을 위해 ACK라는 개념을 사용하여 메시지에 대한 응답을 보내주도록 되어 있습니다. Rabbit MQ는 ACK(Consumer 전달 확인)과 Confirm(Publish 전달 확인)을 이용합니다. ACK가 중요한 이유는 Queue는 Consumer에게 데이터를 전달하고 나면 Queue에서 메시지를 삭제하므로, Consumer가 전달 받았지만 처리 도중 오류가 발생하여 재처리해야하는 경우를 위해 보관 유예기간을 두는 용도로 이용됩니다. 즉, ACK가 온 메시지만 삭제처리하도록 하는 것입니다.

728x90

'기타' 카테고리의 다른 글

Virtual DOM  (0) 2020.06.08
Vue.js  (0) 2020.06.05
Kafka  (0) 2020.05.08
Message Queue  (0) 2020.05.08
Pub/Sub 모델  (0) 2020.05.07