JMS та AMQP - RabbitMQ


133

Я намагаюся зрозуміти, що таке JMS і як це пов’язано з термінологією AMQP. Я знаю, що JMS - це API, а AMQP - протокол.

Ось мої припущення (і питання також)

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

Деякі з перерахованих вище можуть бути німими. :-) Але намагаюся обернути голову навколо цього.


3
@KevinRave: У деяких основних моментах обрана відповідь помилкова. Я додав коментар, щоб ви могли його подивитися.
2020.

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

Я не знаю, хто відредагував мою відповідь і дав цю неправильну точку, яка була під номером 3 .. тому що я вже запитав те, про що говорить Кевін у пункті 2. Завжди уважно читайте перед тим, як голосувати або робити пропозиції
Freak

1
Подивіться розділ СМС у цій статті. Це дуже детальне пояснення saipraveenblog.wordpress.com/2014/12/08/…
java_geek

Відповіді:


118

Ваше запитання трохи заплутане і нагадує складне запитання у папері для запитання :) (Оскільки вчителі завжди намагаються задавати прості запитання, складаючи складний: ДІ сподіваюся, ви не вчитель :)) Давайте подивимось усі ці по черзі.

Як ти знаєш:

API служби повідомлень Java (JMS) - це програмне забезпечення, орієнтоване на програмне забезпечення, орієнтоване на повідомлення для Java, для надсилання повідомлень між двома або більше клієнтами . JMS є частиною платформи Java, Enterprise Edition і визначається специфікацією, розробленою в рамках процесу спільноти Java як JSR 914. Це стандарт обміну повідомленнями, що дозволяє компонентам додатків на основі Java Enterprise Edition (Java EE) створювати, надсилати, отримувати та читати повідомлення. Це дозволяє зв’язок між різними компонентами розподіленої програми бути вільно пов'язаним, надійним та асинхронним .

ЗаразВікіпедії ):

Протокол розширеної черги повідомлень (AMQP) - це відкритий стандартний протокол рівня додатків для програмного забезпечення, орієнтованого на повідомлення. Визначальними рисами AMQP є орієнтація на повідомлення, черга в черзі, маршрутизація (включаючи точку в точку та публікацію та підписку), надійність та безпеку.

І найголовніше (знову ж таки з Вікіпедії):

На відміну від JMS, який просто визначає API, AMQP - це протокол рівня проводів. Протокол рівня проводів - це опис формату даних, що надсилаються по мережі у вигляді потоку октетів. Отже, будь-який інструмент, який може створювати та інтерпретувати повідомлення, які відповідають цьому формату даних, може взаємодіяти з будь-яким іншим сумісним інструментом незалежно від мови реалізації

Деякі важливі речі, які ви повинні знати:

  1. Майте на увазі, що AMQP - це технологія обміну повідомленнями, яка не реалізує API JMS.
  2. JMS - це API, а AMQP - протокол. Тому не має сенсу говорити, що протокол JMS за замовчуванням, звичайно, клієнтські програми використовують HTTP / S як протокол підключення при виклику WebLogic Web Service.
  3. JMS - лише специфікація API. Він не використовує жодного протоколу. Постачальник JMS (як ActiveMQ) може використовувати будь-який базовий протокол для реалізації API JMS. Наприклад: 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) може використовувати будь-який базовий протокол для реалізації API JMS. Наприклад: 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 (Advance Message Queuing Protocol). В даний час доступно багато API клієнтів (наприклад, Java, C ++, RESTful тощо), щоб дозволити користуватися послугами обміну повідомленнями RabbitMQ.

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

Згідно з вищезгаданим, якщо взяти скелет API JMS, екземпляр RabbitMQ та його API клієнтських Java, можна розробити реалізацію JMS, використовуючи RabbitMQ: єдине, що потрібно зробити, на той момент, це реалізація схема обміну (над RabbitMQ) відповідно до специфікації JMS.

Ключовим є: набір API, як JMS, може бути реалізований незалежно від технології (в даному випадку RabbitMQ).


Що означає TLC?
mvmn

@mvmm TLC означає Телекомунікації. Будь ласка, погляньте на [1]. [1] allacronyms.com/TLC/Телекомунікації
Паоло Мареска

15

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


2
  • Де тут грає JMS API? API JMS повинен використовувати клієнтські бібліотеки AMQP для підключення до RabbitMQ?

JMS - це API, тому деякі API JMS реалізуються через протокол AMQP (наприклад, Apache QPID JMS ), тоді як більшість API JMS використовують інші протоколи. Якщо версія протоколу 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. Клієнт JMS для RabbitMQ реалізує специфікацію JMS 1.1 поверх API клієнта RabbitMQ Java, тим самим дозволяє новим і існуючим програмам JMS з'єднуватися з брокерами RabbitMQ через протокол розширеного черги повідомлень (AMQP).


Ні. Це не той, на кого я дивився. Але подібні.
Кевін Рейв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.