programing

JMS 및 AMQP - 토끼MQ

javaba 2022. 9. 3. 23:54
반응형

JMS 및 AMQP - 토끼MQ

JMS의 종류와 AMQP 용어와의 관련성을 이해하려고 합니다.JMS는 API이고 AMQP는 프로토콜인 것으로 알고 있습니다.

다음은 저의 전제조건(및 질문)입니다.

  • Rabbit MQ는 AMQP 프로토콜을 사용합니다(AMQP 프로토콜을 구현합니다).
  • Java 클라이언트는 AMQP 프로토콜 클라이언트 라이브러리를 사용하여 Rabbit을 연결/사용해야 합니다.MQ
  • 여기서 JMS API는 어디서 작동하나요?JMS API는 AMQP 클라이언트 라이브러리를 사용하여 RabbitMQ에 연결해야 합니까?
  • 보통 JMS를 사용하여 Rabbit MQ, Active MQ 등의 메시지브로커를 연결합니다.그렇다면 여기서 AMQP 대신 사용되는 기본 프로토콜은 무엇입니까?

위의 몇 가지는 바보같을지도 모른다. :-) 하지만 머리를 싸매고 있다.

질문이 좀 지저분한데 하나하나 살펴봅시다.

일반적인 개념:

Java Message Service(JMS) API는 두 개 이상의 클라이언트 간에 메시지를 보내기 위한 Java Message Oriented Middleware(MOM; 메시지 지향 미들웨어) API입니다.JMS는 Java Platform Enterprise Edition의 일부이며 Java Community Process에서 개발된 규격(JSR 914)에 의해 정의됩니다.Java Enterprise Edition(Java EE) 기반의 응용 프로그램컴포넌트가 메시지를 작성, 송신, 수신 및 읽을 수 있도록 하는 메시징 표준입니다.를 통해 분산 응용 프로그램의 서로 다른 구성 요소 간의 통신을 느슨하게 결합하고 신뢰할 있으며 비동기화할 수 있습니다.

지금 (Wikipedia에서):

Advanced Message Queuing Protocol(AMQP)은 메시지 지향 미들웨어용 개방형 표준 애플리케이션 계층 프로토콜입니다.AMQP의 정의 기능은 메시지 오리엔테이션, 큐잉, 라우팅(포인트 투 포인트 및 퍼블리시 앤 서브스크라이브 포함), 신뢰성 및 보안입니다.

그리고 가장 중요한 것은 (Wikipedia에서도 마찬가지)

API만 정의하는 JMS와 달리 AMQP는 와이어 수준의 프로토콜입니다.와이어 레벨 프로토콜은 옥텟 스트림으로 네트워크를 통해 전송되는 데이터 형식을 설명합니다.따라서, 이 데이터 형식에 준거한 메시지를 작성 및 해석할 수 있는 툴은, 실장 언어에 관계없이, 다른 준거 툴과 상호 운용할 수 있습니다.

알아야 할 중요한 사항:

  1. AMQP는 JMS API를 구현하지 않는 메시징 기술입니다.
  2. JMS는 API이고 AMQP는 프로토콜입니다.따라서 JMS의 기본 프로토콜이라고 하는 것은 의미가 없습니다.물론 클라이언트애플리케이션은 WebLogic Web Service를 기동할 때 접속 프로토콜로서 HTTP/S를 사용합니다.
  3. JMS는 API 사양에 불과합니다.어떤 프로토콜도 사용하지 않습니다.JMS 공급자(ActiveMQ 등)는 JMS API를 실현하기 위해 기본 프로토콜을 사용할 수 있습니다.예: Apache ActiveMQ는 다음 프로토콜 중 하나를 사용할 수 있습니다.AMQP, MQTT, OpenWire, REST(HTTP), RSS 및 ATOM, Stomp, WSIF, WS 알림, XMPP.JMS Transport를 Connection Protocol로 사용하기를 권장합니다.

행운을 빈다 :)

기본부터 시작합시다.

RabbitMQ는 Erlang(TLC 지향 프로그래밍 언어)과 함께 개발되어 와이어 프로토콜 AMQP(Advanced Message Queuing Protocol)를 구현한 MOM(메시지 지향 미들웨어)입니다.현재 많은 클라이언트 API(Java, C++, RESTful 등)를 사용하여 Rabbit을 사용할 수 있습니다.MQ 메시징 서비스

JMS(Java Messaging Service)는 MOM에 의해 구현되는 일련의 구조화된 API를 정의하는 JCP 표준입니다. JMS API를 구현하는 MOM의 예로는 ActiveMQ, HornetMQ 등이 있습니다.이러한 미들웨어는 JMS API를 취득하고 그에 따라 교환 패턴을 구현합니다.

위와 같이 JMS API의 골격과 RabbitMQ의 인스턴스 및 Java Client API를 활용하면 Rabbit을 활용한 JMS 구현을 개발할 수 있다.MQ: 이 시점에서 해야 할 일은 (Rabbit을 통해) 교환 패턴을 구현하는 것뿐입니다.MQ)에 준거한다.

중요한 것은 JMS와 같은 일련의 API는 테크놀로지(이 경우 Rabbit MQ)에 관계없이 구현할 수 있다는 것입니다.

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 클라이언트와 통신할 수 있어야 합니다.

  • 보통 JMS를 사용하여 Rabbit MQ, Active MQ 등의 메시지브로커를 연결합니다.그렇다면 여기서 AMQP 대신 사용되는 기본 프로토콜은 무엇입니까?

JMS API 설정에 따라 달라집니다.ActiveMQ의 경우 AMQP일 수 있지만 기본적으로는 'open wire'입니다.

JMS란?

JMS는 메시지 브로커와 작업하기 위한 공통 API를 정의하는 Java 표준입니다.

JMS가 필요한 이유는 무엇입니까?

  1. 2001년 도입되어 오랫동안 비동기 메시징에 채용되어 왔습니다.

  2. JMS 이전에는 메시지 브로커가 독자 API를 가지고 있어 브로커 간에 애플리케이션의 메시징 코드가 이동성이 떨어졌습니다.

  3. JMS에서는, 모든 준거 실장을 공통의 인터페이스를 개입시켜 조작할 수 있습니다.따라서 브로커에서 "Apache Active MQ"를 "Apache Active MQ Artemis"로 변경하는 경우 JMS 인터페이스가 코드 이식성을 보장하므로 이식성 문제에 대해 걱정할 필요가 없습니다.

JMS의 단점?

  1. 2001년 JMS는 정의되었을 때 JMS 클라이언트와 JMS 메시징 서버 간에 어떠한 프로토콜도 적용하지 않았습니다.JMS 클라이언트는 통신을 위해 어떤 프로토콜도 사용할 수 있었고 클라이언트는 JMS API를 준수하는 프로토콜을 확인해야 했습니다.
  2. JMS는 Java 어플리케이션으로 제한됩니다.

AMQP란?

  1. AMQP(Advanced Message Queuing Protocol)는 메시지를 전달하기 위한 일종의 개방형 표준 애플리케이션 계층 프로토콜입니다.
  2. AMQP 0.9.1은 2008년 11월에 발행되었습니다.
  3. AMQP는 메시지 구성 방법에 대한 설명을 제공합니다.JMS와 달리 메시지 전송 방법에 대한 API를 제공하지 않습니다.

AMQP가 필요한 이유

  1. AMQP는 메시징 클라이언트와 메시징 서버 간의 프로토콜일 뿐입니다.따라서 JMS 클라이언트도 AMQP를 메시징 서버와 통신하는 프로토콜로 사용할 수 있습니다.

  2. AMQP는 모든 플랫폼에 존재하는 메시징 프로토콜입니다.어떤 AMQP 클라이언트를 사용하는지는 중요하지 않습니다.AMQP 클레임인 한 AMQP 클라이언트는 유지됩니다.

JMS는 Sun - Oracle의 API입니다.
이 API를 구현하는 드라이버가 있습니다.각 언어 및 각 메시징 시스템에 대해 최소 1개의 드라이버가 있습니다.예: Java + Rabbit MQ -> 드라이버, Java + ActiveMq, C# + Rabbit MQ, Go + IBM MQ 등.
AMQP는 MQ와 매우 유사한 와이어 레벨 프로토콜입니다.TT, STOMP 또는 Openwire.API가 아닙니다.이것에 의해, 다음의 2개의 새로운 것이 떠오른다.

  1. 메시징 시스템에서는 ActiveMQ STOMP 플러그인 등 와이어 레벨 프로토콜을 지원하기 위한 플러그인이 필요할 수 있습니다.
  2. 드라이버는 표준 JMS API 호출을 STOP, aMQP 등의 호출로 변환하여 와이어 레벨 프로토콜을 지원해야 합니다.
    마지막으로 -> 메시징 시스템 + API + 와이어 레벨 프로토콜당 1개의 드라이버를 사용할 수 있습니다.
    Java 코드 -> API -> 드라이버 -> 와이어 레벨 프로토콜 -> 플러그인 -> 메시징 시스템

https://spring.io/understanding/AMQP

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

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

이 문서에는 다음과 같은 내용이 기재되어 있습니다.

vFabric Rabbit용 JMS 클라이언트MQ는 vFabric RabbitMQ의 클라이언트 라이브러리입니다.vFabric RabbitMQ는 JMS 공급자는 아니지만 JMS 큐 및 토픽 메시징 모델을 지원하는 데 필요한 기능이 있습니다.JMS RabbitbitMQ는 RabbitMQ Java 클라이언트 API 위에 JMS 1.1 규격을 구현하여 신규 및 기존 JMS 애플리케이션을 Advanced Message Queueing Protocol(AMQP)을 통해 RabbitMQ 브로커와 연결할 수 있도록 합니다.

언급URL : https://stackoverflow.com/questions/15150133/jms-and-amqp-rabbitmq

반응형