Free Lines Arrow
본문 바로가기
Development/WEB

[WEB] MQ(Message Queue)

by skahn1215 2021. 8. 28.
728x90
반응형

Message Queue

프로그램 간 데이터를 교환할때 사용하는 통신 방법중에 하나이다.

더큰 개념은 MOM(Message Orinted Middleware: 메세지 지향 미들웨어를 의미한다.

 

MOM 이란 비동기 메시지를 사용하는 프로그램간의 데이터 송수신을 의미한다.

MOM 을 구현한 시스템을 MQ 라고한다.

 

MQ는 메세지를 교환할때 AMQP(Advanced Message Queuing Protocol) 을이용한다.

IOS 의 응용계층 MOM 표준이다.

AMQP는 protocol 만 일치한다면 다른 AMQP를 사용한 Application과도 통신이 가능핟.

 

JMS는 MOM을 자바에서 지원하는 표준 API이다.

JMS 는 Java applicaton간에 통신은 가능 하지만 다른 MOM(AMQP, SMPT)끼리는 통신 할수 없다.

 

 

 

Message Queue의 장점

  • 비동기: Queue에 넣기 때문에 나중에 처리 할 수 있다.
  • 비동조: Application과 분리가 가능하다.
  • 탄력성: 일부가 실패 시 전체는 영향을 받지 않는다.
  • 과잉: 실패할 경우 재실행이 가능하다.
  • 확장성: 다수의 프로세스들이 큐에 메시지를 보낼 수 있다.

 

 

Message Queue 사용처

  • 다른곳의 API 로 부터 데이터 송수신
  • 다양한 Application에서 비동기 통신 가능
  • 이메일 발송 및 문서 업로드 가능
  • 많은 양의 프로세스 처리

 

 

 

Message Queue 종류

  • Kafka
  • RabbitMQ
  • ActiveMQ

 

공통으로 3가지 모두 비동기 통신을 제공하고 보낸 사람과 받는 사람을 분리한다.

하지만 다음과 같은 특징들이 있다.

 

Kafka: 처리량이 많은 분산 메시징 시스템에 적합하다

RabbitMQ, ActiveMq는 신뢰성 있는 메시지 가 필요할때 사용

- 신뢰성은 kafka 보다 강력한것이지 kafka가 신뢰성이 없다는 것은 아니다.

 

 

 

RabbitMQ

RabbitMQ는 AMQP프로토콜을 구현해 놓은 프로그램으로 빠르고 쉽게 구현 할수 있다.

 

장점

  • 신뢰성, 안정성
  • 유연한 라우팅 (Message Queue가 도착하기 전에 라우팅이 된다.)
  • 클러스터링(여러 RabbitMQ 서버를 논리적으로 클러스터링 할 수 있다.)
  • 관리 UI 편의성(관리자 페이지 및 모니터링 페이지가 제공됨)
  • 모든 언어 및 운영체에 지원
  • 오픈소스로 상업적 지원가능

 

 

Kafka

kafka는 확장성과 고성능 및 높은 처리량을 내세운 제품이다.

특화된 시스템이기 때문에 기능들이 제한적이다.

분산시스템을 기본으로 설계 되었기 때문에 분산 및 복제 구성을 쉽게 할수 있다.

 

 

 

장점

  • 대용량 실시간 로그 처리에 특화
  • AMQP 프로토콜이나 JSM API를 사용하지 않고 TCP 기반 프로토콜을 사용하여
    오버헤드가 비교적 적다
  • 노드 장애에 대한 대응성을 가지고 있다.
  • 프로듀서는 각 메시지를 배치로 브로커에게 전달 하여 TCP/IP 라운드 트립을 줄였다.
  • 메시지를 기본적으로 파일 시스템에 저장하여 별도의 설정을 하지 않아도 오류발생시 
    오류지점부터 복구가 가능하다.

 

 

ActiveMQ

ActiveMQ는 자바로 만든 오픈소스 메시지 브로커이다.

JMS1.1을 통해 자바 뿐만 아니라 다른 언어를 사용하는 클라이언트 지원.

 

 

장점

  • 다양한 언어와 프로토콜 지원
  • OpenWire를 통해 고성능의 Java, C, C++, C# 클라이언트 지원
  • Stomp를 통해 C, Ruby, Perl, Python, PHP 클라이언트가 ActiveMQ 에 접근가능
  • Spring 지원으로 ActiveMQ는 Spring Application에 매루 쉽게 임베딩될 수 있으며, Spring의 XML 설정
  • 메커니즘에 의해 쉽게 설정가능
  • REST API를 통해 웹기반 메시징 API를 지원

  • OpenWire 프로토콜은 다양한 언어나 플랫폼에서 ActiveMQ에 접속할 수 있게 하는 메시징 프로토콜이다.
  • STOMP 는 Ruby, Python, Perl 과 같은 스크립트 언어를 위해 고안된 단순한 메시징 프로토콜이다.
728x90
반응형

'Development > WEB' 카테고리의 다른 글

[WEB] HTML, HTTP API, CSR, SSR  (0) 2021.10.06
[WEB] SOAP 와 REST 의 차이점  (0) 2021.08.26
[WEB] SOAP  (0) 2021.08.26
[WEB] CORS 란?  (0) 2021.08.17
[WEB] HTTPS  (0) 2021.08.17

댓글