본문 바로가기
Tech/Spring

1. Spring AMQP

by Augustine™ 2020. 2. 11.
반응형

Spring AMQP에 대해 알아보자.

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이다.

RabbitMQ API

RabbitMQ API는 Spring Rabbit MQ 서버로 메세징 송수신 시스템을 구현한다 이 API는 두개의 Spring modules 로 개발되었다.  이전 회사에서 RabbitMQ를 이용해서 애플리케이션을 개발했는데, 딱히 ActiveMQ보다 뭐가 좋은지는 모르겠다. 

1) spring-amqp : AMQP Protocol의 추상화 모듈

2) spring-rabbit : rabbitMQ의 구현체

ActiveMQ AMQP API

이 API는 Apache Active MQ Server로 메세징 시스템을 구현한다. 마찬가지로 다음 API를 제공한다.

1) spring-amqp : AMQP protocol의 추상화 모듈

2) activemq-spring : ActiveMQ의 구현체

이 두 API의 차이점이라면... RabbitMQ는 Spring Framework 를 개발 및 관리를 하는 Pivotal Team이 발표했고, ActiveMQ는 Apache Software 재단에서 발표했다는 점이다.

 

다음 포스팅은 RabbitMQ에 대해서....

https://augustines.tistory.com/184

 

Spring RabbitMQ

Spring AMQP Spring AMQP Spring AMQP에 대해 알아보자. Spring AMQP Spring AMQP는 AMQP 기반 메세지 솔루션의 Spring 구현체다. Spring AMQP는 메시지 송수신을 위한 템플릿을 제공한다. AMQP란? AMQP는 Advance..

augustines.tistory.com

 

반응형

댓글