JMS и AMQP - RabbitMQ

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

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

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

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


person Kevin Rave    schedule 01.03.2013    source источник
comment
@KevinRave: Выбранный ответ неверен по некоторым основным пунктам. Я добавил комментарий, чтобы вы могли его посмотреть.   -  person 2020    schedule 08.05.2013
comment
@KevinRave Я отредактировал ответ.Теперь спорная часть заменена.Теперь весь ответ в полном порядке   -  person Freak    schedule 17.07.2013
comment
Я не знаю, кто редактировал мой ответ и дал этот неправильный пункт под номером 3 .. потому что я уже спросил, что Кевин говорит в пункте 2. Всегда внимательно читайте, прежде чем голосовать против или вносить предложения   -  person Freak    schedule 17.07.2013
comment
Взгляните на раздел JMS в этой статье. Здесь есть очень подробное объяснение saipraveenblog.wordpress.com/2014 / 12/08 /   -  person java_geek    schedule 15.12.2014
comment
Руководство RabbitMQ - jstobigdata.com/rabbitmq/complete-rabbitmq-tutorial-in- java   -  person SyntaX    schedule 04.04.2020


Ответы (6)


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

Как ты знаешь:

Java Message Service (JMS) API - это Java Message Oriented Middleware (MOM) API для отправки сообщений между двумя или более клиентами. 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 в качестве протокола подключения .

Удачи :)

person Freak    schedule 01.03.2013
comment
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. - person 2020; 08.05.2013
comment
Я отредактировал ответ. Теперь скандальная часть заменена. - person Freak; 17.07.2013
comment
@brainOverflow Я не знаю, кто редактировал мой ответ и поставил этот неправильный пункт, который был под номером 3 .. потому что я спросил то, что вы говорите в пункте 2, всегда внимательно читайте, прежде чем голосовать против или вносить предложения - person Freak; 17.07.2013
comment
Я уже добавил материал из этого PDF-файла, так что вы также можете перейти по другим ссылкам - person Freak; 21.03.2015
comment
AMQP не является протоколом проводного уровня. Википедия ошибается, боже, кто бы мог подумать - person niken; 02.02.2021

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

RabbitMQ - это MOM (ориентированное на сообщения промежуточное ПО), разработанное с помощью Erlang (язык программирования, ориентированное на TLC) и реализующее проводной протокол AMQP (Advance Протокол очереди сообщений). В настоящее время доступно множество клиентских 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).

person Paolo Maresca    schedule 16.10.2014
comment
Что означает TLC? - person mvmn; 22.12.2016
comment
@mvmm TLC означает "Телекоммуникации". Пожалуйста, посмотрите [1]. [1] allacronyms.com/TLC/Telecommunication - person Paolo Maresca; 02.01.2017

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

person chitakasa    schedule 01.03.2013

  • Где здесь в игру вступает 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.

person Axel Podehl    schedule 07.06.2017

https://spring.io/understanding/AMQP

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

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

person gstackoverflow    schedule 09.08.2017

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

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

person Danger    schedule 16.04.2014
comment
Неа. Это не тот, на который я смотрел. Но похоже. - person Kevin Rave; 16.04.2014