메시지 브로커란?
- 송신자의 메시지 프로토콜 형식으로 부터의 메시지를 수신자의 메시지 프로토콜 형식으로 변환하는 중간 컴퓨터 프로그램 모듈이다.
메시지 브로커 사용의 이유
-
서비스 간의 의존성 제거
-
메시지 처리 시점
-
EndPoint 관리 용의성
-
다양하고 유연한 통신
-
서비스간 의존성 제거
- 서비스간 통신이 불가능할 때, 요청 쪽에서는 timeout이 발생하여 송신측 서비스에 문제가 발생할 수 있다. 이때, 메시지 브로커를 이용하여 의존성을 제거할 수 있다.
- 메시지 전달 보장
- 메시지 전달을 보장하는 기능이 제공되어 수신자 측에서 메시지를 확실하게 전달 받을 수 있다.
- EndPoint 관리가 수월
- 다양하고 유연한 통신
- 클라이언트 수가 급격하게 늘어날 시, 메시지 브로커 서버를 수평적으로 증설하게 되면 이를 쉽게 해결할 수 있다.
RabbitMQ란?
- 가장 널리 배포된 오픈 소스 메시지 브로커
- 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법
- 더 큰 의미로는 메시지 지향 미들웨어를 구현한 시스템
- 시스템 to 시스템을 이어주는 메커니즘을 가진 미들웨어 시스템
- AMQP를 구현한 오픈 소스 메시지 브로커 소프트웨어로 Publisher로부터 메시지를 받아 Consumer에게 라우트하는 것이 주된 역할, 이를 이용하면 작업 큐, 발행 및 구독, 라우팅, 주제, 원격 프로시저 호출등의 모델을 구현할 수 있다.
메시지 흐름
producer → exchange → queue → consumer
역할
subscribe
exchange
- 메시지를 binding 된 적절한 queue에 라우팅
queue
subscribe
장점
- 비동기 : queue라는 임시 저장소
- 낮은 결합도 : 어플리케이션 분리
- 확장성 : 원하는 대로 서비스 확장
- 탄력성 : consumer 서비스가 다운되더라도 어플리케이션이 중단되는 것은 아니며 메시지는 지속하여 MQ에 남아있다.
- 보장성: MQ에 들어간다면 결국 모든 메시지가 comsumer 서비스에게 전달한다는 보장