- MOM을 위한 개방형 표준 응용 계층 프로토콜, 메시지 큐와 비슷하지만 Exchange 라는 라우터 역할이 존재하며 Binding이라는 개념이 존재한다.
- 손실이나 중복 없이 메시지를 전달해야 하는 사례에서 좋다.
- 한개의 Queue 만 있다면 일반적인 메시지 큐와 비슷하지만 , 여러개의 Consumer와 Queue 가 존재할 때 높은 효율성을 보여준다.
- Exchange : Producer로 부터 전달받은 메세지를 어떤 메세지 큐로 전송할지 결정하는 장소 (분배)
- Queue : Consumer가 소비하기 전까지 메세지가 보관되는 장소
- Binding : Exchange에 전달된 메세지가 어떤 Queue에 저장되어야 하는지 정의
- Exchange의 종류 : Direct (1:1) , Fanout (1:N 브로드캐스트), Topic, Headers (key-value로 정의된 헤더에 의해 라우팅)
1. RabbitMQ
AMQP를 구현해 놓은 메세지 큐
Broker 중심적인 형태
유연하고 복잡한 라우팅이 가능하다
관리 UI가 존재한다
데이터 처리보단 관리적 측면이나 다양한 기능 구현을 위한 서비스를 구축할 때 사용한다.
메시지 큐 서버가 종료 후 재가동시 큐 내용은 모두 삭제한다.
Producer와 Consumer 의 결합도가 높다.
2. ActiveMQ
JMS (Java Mail Service) : 메세지 큐 및 publish - subscribe 패턴과 같은 메세지 기반 통신을 추상화하고 표준화한 API, Java MOM 표준 API
ActiveMQ는 JMS 스펙을 좀 더 사용하기 편리하게 구현한 오픈소스 메시지 브로커
AMQP 기반의 RabbitMQ를 사용하는 프로세스와의 통신은 불가능하다.
ActiveMQ 구성요소 : Message Broker (중개자) , Destination (목적지에 배달될 2가지 모델 Topic, Queue), Queue (메세지 전달 통로) , Topic ( Queue와 비슷하지만 여러 Consumer에게 메세지를 건네줄 수 있다)
Queue 의 경우 Consumer가 다수일 때 연결된 순서로 제공된다.
Topic의 경우 Consumer가 다수일 때 모두에게 제공된다.
3. Kafka
파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼
Pub-Sub 모델의 메시지 큐 형태로 동작하며 분산환경에 특화되어 있다.
이벤트 브로커 !!!
메시지를 메모리에 저장하는 기존 메시징 시스템과는 달리 파일에 저장을 하기 떄문에 재시작하는 경우에 메시지 유실 우려가 감소된다.
기본 메시징 시스템은 Broker가 Consumer에게 메시지를 Push 해주는 방식, Kafka는 Consumer가 Broker로 부터 직접 가져가는 Pull 방식으로 동작하기 때문에 자신의 처리 능력 만큼만의 메시지만 가져와 최적의 성능을 낼 수 있다.