JMS и AMQP - RabbitMQ


134

Я пытаюсь понять, что такое JMS и как это связано с терминологией AMQP. Я знаю, что JMS - это API, а AMQP - это протокол.

Вот мои предположения (и вопросы тоже)

  • RabbitMQ использует протокол AMQP (скорее реализует протокол AMQP)
  • Клиенты Java должны использовать клиентские библиотеки протокола AMQP для подключения / использования RabbitMQ
  • Где здесь задействован JMS API? JMS API должен использовать клиентские библиотеки AMQP для подключения к RabbitMQ?
  • Обычно мы используем JMS для подключения брокеров сообщений, таких как RabbitMQ, ActiveMQ и т. Д. Тогда какой протокол по умолчанию используется здесь вместо AMQP?

Некоторые из вышеперечисленных могут быть глупыми. :-) Но пытаюсь осознать это.


3
@KevinRave: Выбранный ответ неверен по некоторым основным пунктам. Я добавил комментарий, чтобы вы могли его посмотреть.
2020

@KevinRave Я отредактировал ответ.Теперь спорная часть заменена.Теперь весь ответ в полном порядке
Freak

Я не знаю, кто редактировал мой ответ и дал этот неправильный пункт под номером 3 .. потому что я уже спросил, что Кевин говорит в пункте 2. Всегда внимательно читайте, прежде чем голосовать против или вносить предложения
Freak

1
Взгляните на раздел JMS в этой статье. Там
java_geek

Учебное пособие по RabbitMQ - jstobigdata.com/rabbitmq/complete-rabbitmq-tutorial-in-java
SyntaX

Ответы:


118

Ваш вопрос немного запутан и напоминает сложный вопрос в вопроснике :) (Поскольку учителя всегда пытаются задавать простые вопросы, делая сложные: D Я надеюсь, что вы не учитель :)) Давайте рассмотрим все это один за другим.

Как вы знаете:

API службы сообщений Java (JMS) - это API промежуточного программного обеспечения Java (MOM) для отправки сообщений между двумя или более клиентами . JMS является частью платформы Java, Enterprise Edition, и определяется спецификацией, разработанной в рамках процесса сообщества Java как JSR 914. Это стандарт обмена сообщениями, который позволяет компонентам приложений на основе Java Enterprise Edition (Java EE) создавать, отправлять, получать и читать сообщения. Это позволяет обмену данными между различными компонентами распределенного приложения быть слабосвязанными, надежными и асинхронными .

Сейчас (из Википедии ):

Advanced Message Queuing Protocol (AMQP) - это открытый стандартный протокол прикладного уровня для промежуточного программного обеспечения, ориентированного на сообщения. Определяющими характеристиками AMQP являются ориентация сообщений, организация очередей, маршрутизация (включая двухточечную и публикацию и подписку), надежность и безопасность.

И самое главное (опять же из Википедии):

В отличие от JMS, который просто определяет API, AMQP - это протокол проводного уровня. Протокол проводного уровня - это описание формата данных, которые передаются по сети в виде потока октетов. Следовательно, любой инструмент, который может создавать и интерпретировать сообщения, соответствующие этому формату данных, может взаимодействовать с любым другим совместимым инструментом независимо от языка реализации.

Вам следует знать несколько важных вещей:

  1. Имейте в виду, что AMQP - это технология обмена сообщениями, которая не реализует JMS API.
  2. JMS - это API, а AMQP - это протокол. Поэтому нет смысла говорить, что протокол JMS по умолчанию, конечно, клиентские приложения используют HTTP / S в качестве протокола подключения при вызове веб-службы WebLogic.
  3. JMS - это всего лишь спецификация API. Он не использует никаких протоколов. Поставщик JMS (например, ActiveMQ) может использовать любой базовый протокол для реализации JMS API. Например: Apache ActiveMQ может использовать любой из следующих протоколов: AMQP, MQTT, OpenWire, REST (HTTP), RSS и Atom, Stomp, WSIF, WS Notification, XMPP. Предлагаю вам прочитать Использование транспорта JMS в качестве протокола подключения .

Удачи :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: Нет. Это не правильно. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: Нет. Это не правильно. JMS - это всего лишь спецификация API. Он не использует никаких протоколов. Поставщик JMS (например, ActiveMQ) может использовать любой базовый протокол для реализации JMS API. Например: Apache ActiveMQ может использовать любой из следующих протоколов: AMQP, MQTT, OpenWire, REST (HTTP), RSS и Atom, Stomp, WSIF, WS Notification, XMPP.
2020

Я отредактировал ответ. Теперь скандальная часть заменена.
Freak

1
@brainOverflow Я не знаю, кто отредактировал мой ответ и поставил этот неправильный пункт под номером 3 .. потому что я спросил то, что вы говорите в пункте 2. Всегда внимательно читайте, прежде чем голосовать против или вносить предложения
Freak

Я уже добавил материал из этого PDF-файла, так что вы также можете перейти по другим ссылкам
Freak

43

Начнем с основы.

RabbitMQ - это MOM (ориентированное на сообщения промежуточное ПО), разработанное с помощью Erlang (язык программирования, ориентированное на TLC) и реализующее проводной протокол AMQP ( протокол расширенной очереди сообщений). В настоящее время доступно множество клиентских API (например, Java, C ++, RESTful и т. Д.), Позволяющих использовать службы обмена сообщениями RabbitMQ.

JMS (Java Messaging Service) - это стандарт JCP, определяющий набор структурированных API-интерфейсов, которые должны быть реализованы MOM. Примером MOM, который реализует (т. Е. Совместимо с) API JMS, является ActiveMQ; есть еще HornetMQ и другие. Такие промежуточные программы получают API-интерфейсы JMS и соответствующим образом реализуют шаблоны обмена.

В соответствии с вышеизложенным, взятым из каркаса JMS API, экземпляра RabbitMQ и его клиентских API Java, можно разработать реализацию JMS с использованием RabbitMQ: единственное, что нужно сделать на этом этапе, - это реализовать шаблон обмена (через RabbitMQ) согласно спецификации JMS.

Ключ: набор API, таких как JMS, может быть реализован независимо от технологии (в данном случае RabbitMQ).


Что означает TLC?
mvmn

@mvmm TLC означает "Телекоммуникации". Пожалуйста, посмотрите [1]. [1] allacronyms.com/TLC/Telecommunication
Паоло Мареска

15

JMS, когда он был определен, не определял протокол между клиентом JMS и сервером обмена сообщениями. Клиент JMS, реализующий JMS API, может использовать любой протокол для связи с сервером обмена сообщениями. Клиент просто должен быть совместим с JMS api. Вот и все. Обычно клиенты JMS используют специальный протокол, понятный их серверу обмена сообщениями.

С другой стороны, AMQP - это протокол между клиентом обмена сообщениями и сервером обмена сообщениями. Клиент JMS может использовать AMQP в качестве протокола для связи с сервером обмена сообщениями. И такие клиенты есть.

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


2
  • Где здесь задействован JMS API? JMS API должен использовать клиентские библиотеки AMQP для подключения к RabbitMQ?

JMS - это API, поэтому некоторые JMS API реализуются по протоколу AMQP (например, Apache QPID JMS ), тогда как большинство JMS API используют другие протоколы. Если версия протокола AMQP такая же, такой клиент должен иметь возможность взаимодействовать с другим клиентом AMQP.

  • Обычно мы используем JMS для подключения брокеров сообщений, таких как RabbitMQ, ActiveMQ и т. Д. Тогда какой протокол по умолчанию используется здесь вместо AMQP?

Это зависит от вашей конфигурации этого JMS API. Для ActiveMQ это может быть AMQP, но по умолчанию это openwire.



0

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol) - это открыто публикуемая спецификация проводов для асинхронного обмена сообщениями. Указан каждый байт передаваемых данных. Эта характеристика позволяет писать библиотеки на многих языках и запускать их в нескольких операционных системах и архитектурах ЦП, что обеспечивает действительно интероперабельный межплатформенный стандарт обмена сообщениями.

AMQP часто сравнивают с JMS (Java Message Service), самой распространенной системой обмена сообщениями в сообществе Java. Ограничением JMS является то, что API-интерфейсы указаны, а формат сообщения - нет. В отличие от AMQP, JMS не требует формирования и передачи сообщений. По сути, каждый брокер JMS может реализовать сообщения в другом формате. Им просто нужно использовать один и тот же API.


-1

Я подозреваю, что вы, возможно, ищете эту документацию, в которой, в частности, говорится:

Клиент JMS для vFabric RabbitMQ - это клиентская библиотека для vFabric RabbitMQ. vFabric RabbitMQ не является поставщиком JMS, но имеет функции, необходимые для поддержки моделей обмена сообщениями JMS Queue и Topic. Клиент JMS для RabbitMQ реализует спецификацию JMS 1.1 поверх клиентского API RabbitMQ Java, что позволяет новым и существующим приложениям JMS подключаться к брокерам RabbitMQ через расширенный протокол очереди сообщений (AMQP).


Нет. Это не тот, на который я смотрел. Но похоже.
Кевин Рэйв
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.