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 Platform, Enterprise Edition и се дефинира от спецификация, разработена в рамките на Java Community Process като JSR 914. Това е стандарт за съобщения, който позволява компоненти на приложения, базирани на Java Enterprise Edition (Java EE) за създаване, изпращане, получаване и четене на съобщения. Тя позволява комуникацията между различни компоненти на разпределено приложение да бъде свободно свързана, надеждна и асинхронна.

Сега (от Wikipedia):

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 Transport като протокол за връзка.

Късмет :)

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, който внедрява (т.е. е съвместим с) JMS API е ActiveMQ; има и HornetMQ и други. Такива междинни софтуери получават JMS API и съответно прилагат моделите за обмен.

Съгласно по-горе, взети скелета на JMS API, екземпляр на RabbitMQ и неговите Java клиентски API, е възможно да се разработи 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/Телекомуникации - 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) е открито публикувана кабелна спецификация за асинхронни съобщения. Всеки байт предадени данни е специфициран. Тази характеристика позволява библиотеките да бъдат написани на много езици и да работят на множество операционни системи и CPU архитектури, което прави един наистина оперативно съвместим, междуплатформен стандарт за съобщения.

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

person gstackoverflow    schedule 09.08.2017

Подозирам, че може да търсите тази документация, която казва отчасти:

JMS Client за vFabric RabbitMQ е клиентска библиотека за vFabric RabbitMQ. vFabric RabbitMQ не е доставчик на JMS, но има функции, необходими за поддържане на моделите за съобщения JMS Queue и Topic. JMS Client за RabbitMQ внедрява спецификацията JMS 1.1 върху RabbitMQ Java клиентския API, като по този начин позволява на нови и съществуващи JMS приложения да се свързват с RabbitMQ брокери чрез Advanced Message Queuing Protocol (AMQP).

person Danger    schedule 16.04.2014
comment
не Не е този, който гледах. Но подобни. - person Kevin Rave; 16.04.2014