JMS и AMQP - RabbitMQ

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

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

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

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

Ответ 1

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

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

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

Теперь (из Wikipedia):

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

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

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

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

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

Удачи:)

Ответ 2

Пусть начнется с базы.

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

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

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

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

Ответ 3

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

Ответ 4

У меня были похожие вопросы по JMS и AMQP. В то время как обсуждение здесь отвечает на вопросы. Эта ссылка из spring.io также объясняет это красиво и стоит взглянуть, следовательно, обмен...

Понимание AMQP

Ответ 5

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

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

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

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

Ответ 6

https://spring.io/understanding/AMQP

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

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

Ответ 7

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

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