Spring AMQP
Spring AMQP는 AMQP 기반 메세지 솔루션의 Spring 구현체입니다.
Spring AMQP는 메시지 송수신을 위한 템플릿을 제공합니다.
AMQP란?
AMQP는 Advanced Message Queuing Protocol로, MOM(Message Oriented Middleware) 구현을 위한 표준 프로토콜입니다.
JMS도 있는데 왜 AMQP가 필요한 이유?
Enterprise한 메시지를 주고받는 시스템을 개발할 때, JMS APIR라는게 있는데 왜 또 다른 Messaging 표준을 갈구하고 또 필요로 할까? JMS API의 한계는 오직 Java 로 개발된 시스템끼리만 메시지를 주고 받을 수 있습니다. 다른 언어는 지원하지 않습니다. Java가 많이 사용되는 언어이긴 하지만, 그래도 이기종의 언어와 메시지를 주고받을 일이 수없이 많습니다. AMQP는 이러한 JMS Api의 치명적인 점을 해결할 수 있습니다.
AMQP는 이기종의 플랫폼과 메시지 송수신을 담당하는 Broker 사이에서 상호 운용성을 지원합니다. Java든, C++이든 Ruby든, C#이든.. 그리고 어떤 OS 환경에서 시스템을 개발하더라도 AMQP message broker는 이들 언어의 장벽을 뛰어 넘어 소통을 할 수 있도록 지원합니다.
JMS 와 AMQP의 차이점
1. 상호운용성
JMS는 JAVA에 종속적이지만, AMQP는 다른 플랫폼이든, 다른 OS든 문제 없습니다. 즉, 시스템간 상호운용이 가능합니다.
2. Messaging Models
JMS API는 메시지 교환 모델로 P2P(Peer to Peer) 모델과 PUB/SUB(Publisher/Subscriber) 모델을 지원합니다. 이에 반해 AMQP는 다음과 같이 좀 더 다양한 옵션이 있습니다.
Direct Exchange, Fanout Exchange, Topic Exchange, Headers Exchange, System Exchange 등이 있다습니다.
3. Message Structure
JMS Message는 Header와 Properties 그리고 Body로 구성되어 있습니다. AMQP는 총 4개의 부분으로 즉, Header와 Properties, Body 그리고 Footer로 구성되어 있습니다.
4. Message Type
JMS Api는 본문 섹션의 일부로 5가지 유형의 메시지를 지원하지만, AMQP는 오직 Binary 바이트 메시지만 지원합니다.
Spring AMQP는 어떻게 동작하나?
Spring Framework 는 AMQP Message 애플리케이션 개발을 위한 AMQP API를 제공합니다. AMQP 메세징 시스템에서 Message Publisher(즉, 메세지를 보내는 쪽)는 Exchange에 메세지를 보내는데 이 때, Publisher는 Exchange Queue에 연결되어 있는 메세지를 수신하는 쪽을 모릅니다. Exchange가 구성되는 동안, 어떤 라우팅 키에 의해 하나 또는 그 이상의 큐에 맵핑 될 수 있습니다. AMQP Consumer(메세지 수신쪽)는 큐에 연결되어 메세지를 수신하게 됩니다. Publisher가 메세지를 Exchange에 보낼 때, Exchange는 라우팅 키(Routing key)를 사용하고 관련 큐에 메세지들을 보냅니다.
즉, Publisher가 Route key 1번으로 메세지를 보냈다면, 이 메세지는 Queue1번에 라우트 되고, Consumer1번에게 전달되고, Publisher가 Route key 2번으로 메세지를 보낸다면, 이 메세지는 Queue2번에 라우트 되고, Consumer2번에게 전달됩니다.
Spring AMQP Modules
Spring Framework는 AMQP 프로토콜 서버를 다루기 위해 두개의 API 세트를 제공합니다. 하나는 Spring RabbitMQ라는 AMQP API이고 또 다른 하나는 ActiveMQ 라는 AMQP API입니다.
AMQP Routing Model 구성도
AMQP 구성요소
구성요소 특징 기능
Exchange | MQ 바인딩 | – Publisher로부터 수신 MQ를 binding – 여러 exchange type 인스턴스 보유 |
Queue | 저장 후 전달 | – 메시지 저장 후 Subscriber에 전달 – 메시지 타입 exchange에 binding |
Binding | 1:1, 1:N | – exchange와 queue 관계 정의 – 1:N, N:1 등 여러 방식으로 binding |
Routing Key | 가상주소 | – 송신 메시지 헤더에 포함 가상 주소 – exchange type은 Routing Key 이용 |
Exchange Type | 라우팅 알고리즘 |
– 여러가지 상황에 대해 정의 알고리즘 Fan-out: 모든 큐로 라우팅 Direct: 라우팅 키를 큐에 1:N으로 매칭 Topic: 와일드카드 이용하여 큐에 매칭 Headers: key-value 정의 헤더로 결정 |
RabbitMQ API
RabbitMQ API는 Spring Rabbit MQ 서버로 메세징 송수신 시스템을 구현합니다. 이 API는 두개의 Spring modules 로 개발되었습니다.
1) spring-amqp : AMQP Protocol의 추상화 모듈
2) spring-rabbit : rabbitMQ의 구현체
ActiveMQ AMQP API
이 API는 Apache Active MQ Server로 메세징 시스템을 구현합니다.
1) spring-amqp : AMQP protocol의 추상화 모듈
2) activemq-spring : ActiveMQ의 구현체
'Metabuild LAB > Dev Study' 카테고리의 다른 글
SOA란? 서비스 지향적 소프트웨어 아키텍쳐 (0) | 2020.12.16 |
---|---|
Docker 란 ? (0) | 2020.11.26 |