RabbitMQ는 Erlang 언어로 개발된 분산 메시지 미들웨어로, 오픈 소스로 제공됩니다. 이는 고급 메시지 대기 프로토콜(AMQP)을 지원하며 Java, Golang, PHP, Python 등 다양한 프로그래밍 언어의 클라이언트 라이브러리를 지원합니다.

특징

  • 신뢰성: 메시지 지속성, 트랜잭션 지원, 소비자 및 전송 승인 등을 통해 신뢰성을 보장합니다.
  • 라우팅 메커니즘: 브로드캐스트, 구독, 헤더 매칭 등과 같은 주류 구독 및 소비 모델을 지원합니다.
  • 확장성: 여러 RabbitMQ 노드가 클러스터를 형성하며 실제 비즈니스 요구에 따라 클러스터를 동적으로 확장할 수 있습니다.
  • 고가용성: 큐는 클러스터의 머신에 미러로 설정될 수 있어 일부 노드에 문제가 발생해도 큐를 사용할 수 있습니다.
  • 다중 프로토콜: 네이티브 AMQP 지원 외에도 RabbitMQ는 STOMP, MQTT 등 여러 메시징 미들웨어 프로토콜을 지원합니다.
  • 다국어 클라이언트: RabbitMQ는 거의 모든 일반적인 언어를 지원합니다. Java, Python, Ruby, PHP, C#, JavaScript 등이 있습니다.
  • 관리 인터페이스: RabbitMQ는 메시지와 클러스터 노드를 모니터링하고 관리할 수 있는 사용자 친화적 인터페이스를 제공합니다.
  • 플러그인 메커니즘: RabbitMQ는 광범위한 확장을 위한 많은 플러그인을 제공하며 사용자는 자체 플러그인을 작성할 수도 있습니다.

주요 사용 사례

비동기 처리

비즈니스 프로세스의 핵심이 아니거나 중요하지 않은 부분은 메시지 통지를 사용하여 대상 시스템에 비동기적으로 통보될 수 있으며, 다른 시스템으로부터의 처리 결과를 동기적으로 기다릴 필요 없이 주요 비즈니스 프로세스가 신속히 응답할 수 있습니다.

응용 프로그램의 결합 해제

메시지 구독 메커니즘을 기반으로 비즈니스 확장이 가능합니다. 예를 들어 전자 상거래 주문 시나리오에서 사용자가 주문할 때 주문 메시지가 생성됩니다. 창고 모듈은 배송을 위해 주문 메시지를 구독할 수 있으며, 포인트 모듈은 포인트 추가를 위해 주문 메시지를 구독할 수 있으며, SMS 모듈은 텍스트 메시지를 보내기 위해 주문 메시지를 구독할 수 있습니다.

피크 쉐이빙

상류 및 하류 시스템의 처리 능력에 차이가 있을 수 있기 때문에 메시지 대기열은 하류 시스템이 꾸준한 속도로 트래픽을 처리할 수 있도록 규제 역할을 할 수 있습니다.

예를 들어 주문을 성공적으로 지불하고 창고에 배송을 통보하는 경우, 현재 주문 모듈이 1000의 고도 병행성을 지원하고 창고 배송이 100만 지원하는 경우, 메시지 대기열을 도입하여 창고 모듈이 주문 메시지를 구독하고 차례로 배송을 처리할 수 있도록 할 수 있습니다.

ps: 지하철 대기열에 서는 것과 비슷합니다.