본 글은 RabbitMQ에 대해서 공부한 지식을 정리하는 글입니다.
현대의 소프트웨어 시스템은 점점 더 복잡해지고 있으며, 다양한 서비스와 애플리케이션이 서로 상호작용해야 하는 상황이 빈번해졌습니다. 이러한 환경에서 메시징 시스템은 시스템 간의 원활한 통신과 데이터 전송을 보장하는 핵심적인 역할을 합니다.
메시징 시스템은 데이터와 이벤트를 신뢰성 있게 전달하고 처리하기 위한 메커니즘을 제공합니다.
특히, 비동기 처리, 분산 시스템, 이벤트 기반 아키텍처와 같은 현대의 다양한 요구사항을 만족시키기 위해 필수적인 요소로 자리 잡고 있습니다.
메시징 시스템을 통해 서비스 간의 결합도를 줄이고, 시스템의 확장성과 신뢰성을 높이며, 데이터 전송의 실패를 최소화할 수 있습니다.
이러한 필요성에 부응하는 강력한 도구 중 하나가 RabbitMQ입니다.
RabbitMQ란❓
RabbitMQ를 알아보기에 앞서 먼저 알아야 할 개념이 AMQP입니다.
AMQP(Advanced Message Queuing Protocol)는 메시지 브로커를 위한 프로토콜입니다.
AMQP는 Protocol에서 알 수 있듯이 메시지 전송의 신뢰성과 효율성을 보장하기 위해 설계되었으며,메시지 중개인과 클라이언트 간의 메시지 교환을 규정합니다.
쉽게 말해, 메시지 통신을 위한 약속이라고 할 수 있습니다.
이전에는 대부분의 메시징 큐(MQ) 시스템이 플랫폼 종속적이었기 때문에 서로 다른 시스템(이기종) 간의 메시지 교환을 위해서는 복잡한 작업(예: 데이터 포맷 변환, 프로토콜 변환 등)이 필요했습니다.
이러한 문제를 해결하기 위해 등장한 것이 바로 AMQP입니다.
즉, AMQP는 서로 다른 시스템 간에 효율적으로 메시지를 교환하기 위해 설계된 프로토콜로, 이 AMQP를 구현한 소프트웨어 중 가장 유명한 것이 바로 RabbitMQ입니다.
RabbitMQ란❓
RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 기반으로 한 메시지 중개인입니다.
메시징 시스템은 소프트웨어 구성 요소 간의 데이터 전송을 담당하며, RabbitMQ는 이를 신뢰성 있게 처리하기 위해 설계되었습니다.
특히, 분산 시스템에서 서비스 간의 통신을 원활하게 만들어주는 중요한 역할을 합니다.
RabiitMQ의 주요 개념
프로듀서(Producer)
- 메시지를 생성하여 RabbitMQ에 전송하는 애플리케이션입니다.
큐(Queue)
- 메시지를 저장하는 버퍼 역할을 합니다.
- 큐에 저장된 메시지는 소비자에게 전달될 때까지 유지됩니다.
컨슈머(Consumer)
- 큐에서 메시지를 가져와 처리하는 애플리케이션입니다.
교환기(Exchange)
- 메시지를 적절한 큐로 라우팅 하는 역할을 합니다.
- 익스체인지는 메시지의 라우팅을 결정하는 다양한 규칙(예: 라우팅 키, 바인딩 등)을 적용합니다.
바인딩(Binding)
- 교환기와 큐를 연결하는 규칙입니다.
- 바인딩은 메시지를 큐로 라우팅 하는 방법을 정의합니다.
Exchange의 유형
Direct Exchange
- 라우팅 키(Routing Key)에 기반하여 메시지를 특정 큐로 전달합니다. 메시지를 보낼 때 지정한 라우팅 키와 큐의 바인딩 키가 일치하면, 메시지가 해당 큐로 전달됩니다.
- 위의 그림에서는 라우팅 키와 바인딩 키가 일치한 Queue1과 Queue3의 큐에 전달됩니다.
Topic Exchange
- 라우팅 키의 패턴 매칭을 사용하여 메시지를 큐로 라우팅 합니다. 라우팅 키가 특정 패턴과 일치하는 큐로 메시지를 전달할 수 있습니다.
- 위의 그림에서는 라우팅 키가 일치하는 Queue1의 큐에 전달됩니다.
Fanout Exchange
- 모든 바인딩된 큐에 메시지를 브로드캐스트 합니다. 메시지를 전송할 때 라우팅 키를 무시하고, 모든 큐에 메시지를 전달합니다.
- 위 그림에서는 모든 바인딩된 Queue1, Queue2, Queue3 큐에 전달됩니다.
Headers Exchange
- 메시지의 헤더 값을 기반으로 큐로 라우팅 합니다. 라우팅 키 대신 메시지의 헤더 필드와 바인딩된 헤더 조건을 사용하여 메시지를 전달합니다.
- 위의 그림에서는 메시지의 헤더와 큐의 바인딩 헤더 조건이 모두 일치하는 Queue1과 하나만 일치하는 Queue2의 큐에 전달됩니다.
- x-match: all
- 메시지의 헤더와 큐의 바인딩 헤더 조건이 모두 일치해야 메시지가 큐로 라우팅 됩니다.
- x-match: any
- 메시지의 헤더와 큐의 바인딩 헤더 조건 중 하나라도 일치하면 메시지가 큐로 라우팅 됩니다.
'MQ' 카테고리의 다른 글
[MQ] RabbitMQ를 활용한 메시지 큐 시스템 구축과 라운드 로빈 방식 컨슈머 동작 확인 (0) | 2024.08.15 |
---|