[java] JMS와 AMQP-RabbitMQ

JMS와 AMQP 용어에 어떻게 연결되어 있는지 이해하려고합니다. JMS는 API이고 AMQP는 프로토콜이라는 것을 알고 있습니다.

여기 내 가정 (및 질문)이 있습니다.

  • RabbitMQ는 AMQP 프로토콜을 사용합니다 (AMQP 프로토콜을 구현 함).
  • Java 클라이언트는 RabbitMQ를 연결 / 사용하기 위해 AMQP 프로토콜 클라이언트 라이브러리를 사용해야합니다
  • JMS API는 어디에서 사용됩니까? JMS API는 AMQP 클라이언트 라이브러리를 사용하여 RabbitMQ에 연결해야합니까?
  • 일반적으로 우리는 RabbitMQ, ActiveMQ 등과 같은 메시지 브로커를 연결하기 위해 JMS를 사용합니다. 그렇다면 AMQP 대신 여기에 사용되는 기본 프로토콜은 무엇입니까?

위의 일부는 바보 일 수 있습니다. 🙂 그러나 내 머리를 감싸려고합니다.



답변

귀하의 질문은 약간 지저분하고 질문지의 어려운 질문과 비슷합니다.

아시다시피 :

JMS ( Java Message Service ) API는 둘 이상의 클라이언트간에 메시지를 전송하기위한 MOM (Java Message Oriented Middleware) API입니다 . JMS는 Java Platform, Enterprise Edition의 일부이며 Java Community Process에 따라 JSR 914로 개발 된 사양에 의해 정의됩니다. Java EE (Java Enterprise Edition)를 기반으로하는 응용 프로그램 구성 요소를 만들 수있는 메시징 표준입니다. 메시지를 보내고 받고 읽습니다. 분산 응용 프로그램의 서로 다른 구성 요소 간의 통신을 느슨하게 결합하고 안정적이며 비동기 적으로 수행 할 수 있습니다.

이제 ( Wikipedia에서 ) :

AMQP (Advanced Message Queuing Protocol) 는 메시지 지향 미들웨어를위한 개방형 표준 애플리케이션 계층 프로토콜입니다. AMQP의 정의 기능은 메시지 오리엔테이션, 큐잉, 라우팅 (점대 점 및 게시 및 구독 포함), 안정성 및 보안입니다.

그리고 가장 중요한 것은 (Wikipedia에서 다시) :

API를 정의하는 JMS와 달리 AMQP는 와이어 레벨 프로토콜입니다. 와이어 레벨 프로토콜은 네트워크를 통해 옥텟 스트림으로 전송되는 데이터 형식에 대한 설명입니다. 결과적으로이 데이터 형식에 맞는 메시지를 작성하고 해석 할 수있는 도구는 구현 언어와 상관없이 다른 호환 도구와 상호 운용 될 수 있습니다.

알아야 할 몇 가지 중요한 사항 :

  1. AMQP는 JMS API를 구현하지 않는 메시징 기술입니다.
  2. JMS는 API이고 AMQP는 프로토콜이므로 JMS의 기본 프로토콜은 물론 클라이언트 응용 프로그램이 WebLogic 웹 서비스를 호출 할 때 연결 프로토콜로 HTTP / S를 사용한다고 말하는 것은 이치에 맞지 않습니다.
  3. JMS는 API 사양 일뿐입니다. 프로토콜을 사용하지 않습니다. JMS 공급자 (ActiveMQ와 같은)는 기본 프로토콜을 사용하여 JMS API를 실현할 수 있습니다. 예 : Apache ActiveMQ는 AMQP, MQTT, OpenWire, REST (HTTP), RSS 및 Atom, Stomp, WSIF, WS Notification, XMPP 프로토콜 중 하나를 사용할 수 있습니다. JMS 전송을 연결 프로토콜로 사용 을 읽는 것이 좋습니다 .

행운을 빕니다 🙂


답변

기초부터 시작합시다.

RabbitMQ Erlang (TLC 지향 프로그래밍 언어)으로 개발되고 유선 프로토콜 AMQP (Advance Message Queuing Protocol)를 구현 하는 MOM (Message Oriented Middleware )입니다. 현재 RabbitMQ 메시징 서비스를 사용하기 위해 많은 클라이언트 API (예 : Java, C ++, RESTful 등)를 사용할 수 있습니다.

JMS (Java Messaging Service)는 MOM에 의해 구현 될 일련의 구조화 된 API 를 정의하는 JCP 표준 입니다. JMS API를 구현하는 (즉, 호환 가능한) MOM의 예는 ActiveMQ입니다. HornetMQ 및 기타도 있습니다. 이러한 미들웨어는 JMS API를 가져오고 이에 따라 교환 패턴을 구현합니다.

위에서 설명한 것처럼 RabbitMQ의 인스턴스와 Java 클라이언트 API의 인스턴스 인 JMS API의 골격을 살펴보면 RabbitMQ를 사용하여 JMS 구현을 개발할 수 있습니다. JMS 사양에 따라 교환 패턴 (RabbitMQ 이상)

핵심은 기술과 상관없이 JMS와 같은 API 세트를 구현할 수 있다는 것입니다 (이 경우 RabbitMQ).


답변

JMS가 정의되었을 때 JMS 클라이언트와 메시징 서버 간의 프로토콜을 정의하지 않았습니다. JMS API를 구현하는 JMS 클라이언트는 모든 프로토콜을 사용하여 메시징 서버와 통신 할 수 있습니다. 클라이언트는 JMS API를 준수해야합니다. 그게 다야. 일반적으로 JMS 클라이언트는 메시징 서버가 이해하는 사용자 정의 프로토콜을 사용합니다.

반면 AMQP는 메시징 클라이언트와 메시징 서버 간의 프로토콜입니다. JMS 클라이언트는 AMQP를 프로토콜로 사용하여 메시징 서버와 통신 할 수 있습니다. 그리고 그와 같은 고객이 있습니다.

http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server


답변

  • JMS API는 어디에서 사용됩니까? JMS API는 AMQP 클라이언트 라이브러리를 사용하여 RabbitMQ에 연결해야합니까?

JMS는 API이므로 일부 JMS API는 AMQP 프로토콜 ( Apache QPID JMS 와 같은 )을 통해 구현 되는 반면 대부분의 JMS API는 다른 프로토콜을 사용합니다. AMQP 프로토콜의 버전이 동일한 경우 해당 클라이언트는 다른 AMQP 클라이언트와 통신 할 수 있어야합니다.

  • 일반적으로 우리는 RabbitMQ, ActiveMQ 등과 같은 메시지 브로커를 연결하기 위해 JMS를 사용합니다. 그렇다면 AMQP 대신 여기에 사용되는 기본 프로토콜은 무엇입니까?

해당 JMS API의 구성에 따라 다릅니다. ActiveMQ의 경우 AMQP 일 수 있지만 기본적으로 ‘openwire’입니다.


답변

논문을 제안하고 싶습니다. AMQP와 JMS의 차이점이 무엇인지 더 잘 이해하는 데 도움이되었습니다.

이 문서에 대한 링크는 다음과 같습니다.
http://www.wmrichards.com/amqp.pdf


답변

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol)는 비동기 메시징을 위해 공개적으로 공개 된 유선 사양입니다. 전송 된 데이터의 모든 바이트가 지정됩니다. 이 특성을 통해 라이브러리를 여러 언어로 작성하고 여러 운영 체제 및 CPU 아키텍처에서 실행할 수 있으므로 상호 운용 가능한 크로스 플랫폼 메시징 표준이됩니다.

AMQP는 종종 Java 커뮤니티에서 가장 일반적인 메시징 시스템 인 JMS (Java Message Service)와 비교됩니다. JMS의 제한 사항은 API가 지정되었지만 메시지 형식이 지정되지 않은 것입니다. AMQP와 달리 JMS는 메시지를 작성하고 전송하는 방법에 대한 요구 사항이 없습니다. 기본적으로 모든 JMS 브로커는 다른 형식으로 메시지를 구현할 수 있습니다. 그들은 동일한 API를 사용해야합니다.


답변

나는 당신 부분적으로 다음과 같은 문서 를 찾고 있다고 생각합니다 .

vFabric RabbitMQ 용 JMS 클라이언트는 vFabric RabbitMQ 용 클라이언트 라이브러리입니다. vFabric RabbitMQ는 JMS 공급자는 아니지만 JMS 대기열 및 주제 메시징 모델을 지원하는 데 필요한 기능이 있습니다. RabbitMQ 용 JMS 클라이언트는 RabbitMQ Java 클라이언트 API 위에 JMS 1.1 사양을 구현하므로 AMJP (Advanced Message Queuing Protocol)를 통해 새 JMS 애플리케이션과 기존 JMS 애플리케이션을 RabbitMQ 브로커와 연결할 수 있습니다.