JMS и AMQP-RabbitMQ

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

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

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

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

6 ответов


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

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

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

теперь (от Википедия):

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

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

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

некоторые важные вещи вы должны знать:

  1. имейте в виду, что AMQP-это технология обмена сообщениями, которая не реализует JMS ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.
  2. JMS-это API, а AMQP-это протокол.Поэтому не имеет смысла говорить, что это протокол по умолчанию JMS, конечно клиент приложения используют HTTP / S в качестве протокола соединения при вызове Сервера WebLogic Web-Сервиса.
  3. JMS - это только спецификация API. Он не использует никакого протокола. Поставщик JMS (например, ActiveMQ) может использовать любой базовый протокол для реализуйте API JMS. Например: Apache ActiveMQ может использовать любой из следующие протоколы: AMQP, MQTT, OpenWire, REST (HTTP), RSS и Atom, Stomp, WSIF, WS уведомление, XMPP. Я предлагаю вам прочитать используя Транспорт JMS как протокол соединения.

Удачи :)


давайте начнем с основы.

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

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

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

ключ: набор API, таких как JMS, может быть реализован независимо от технологии (в данном случае, 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 вступает в игру здесь? API JMS должен использовать клиентские библиотеки AMQP для подключения к RabbitMQ?

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

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

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


https://spring.io/understanding/AMQP

протокол AMQP (расширенный очередей сообщений протокола) является открыто опубликованной провода спецификация асинхронного обмена сообщениями. Каждый байт передается данные указаны. Эта характеристика позволяет библиотекам быть написанным на многих языках, а также для работы на нескольких операционных системах и CPU архитектуры, что делает по-настоящему совместимыми кросс-платформенные стандарт обмена сообщениями.

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


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

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