JMS i AMQP-RabbitMQ

Staram się zrozumieć jaki JMS i jak jest połączony z terminologią AMQP. Wiem, że JMS to API, a AMQP to protokół.

Oto moje założenia (i pytania również)

  • RabbitMQ używa protokołu AMQP (raczej implementuje protokół AMQP)
  • klienci Javy muszą używać bibliotek klientów protokołu AMQP do łączenia / używania RabbitMQ
  • gdzie wchodzi w grę JMS API? JMS API powinien używać bibliotek klienckich AMQP do łączenia się z RabbitMQ?
  • Zwykle używamy JMS do łączenia brokerów wiadomości, takich jak RabbitMQ, ActiveMQ, itp. Więc jaki jest domyślny protokół używany tutaj zamiast AMQP?

Niektóre z powyższych mogą być głupie. :- ) Ale staram się to ogarnąć.

Author: Freak, 2013-03-01

6 answers

Twoje pytanie jest trochę niechlujne i przypomina trudne pytanie w artykule z pytaniami:) (ponieważ nauczyciele zawsze starają się zadawać proste pytania, które są skomplikowane :D Mam nadzieję, że nie jesteś nauczycielem :)) zobaczmy wszystkie te po kolei.

Jak wiecie:

Java Message Service (JMS) API jest API Middleware (MOM) zorientowanym na wiadomości Java do wysyłania wiadomości między dwoma lub więcej klientami. JMS jest częścią platformy Java, Enterprise Edition i jest zdefiniowany przez specyfikację opracowany w ramach Java Community Process jako JSR 914. jest standardem komunikatów, który umożliwia komponentom aplikacji opartym na Java Enterprise Edition (Java EE) tworzenie, wysyłanie, odbieranie i odczytywanie wiadomości. Umożliwia komunikację pomiędzy różnymi komponentami rozproszonej aplikacji, która jest luźno sprzężona, niezawodna i asynchroniczna .

Teraz (z Wikipedii):

Advanced Message Queuing Protocol (AMQP) jest open standard application layer protocol for message-oriented middleware. Na definiowanie funkcji AMQP to orientacja wiadomości, kolejkowanie, routing (w tym punkt-do-punktu i publikować-i-subskrybować), rzetelność i Ochrona.

I najważniejsze (znowu z Wikipedii):

W przeciwieństwie do JMS, który definiuje jedynie API, AMQP jest poziomem przewodowym protokół. Protokół przewodowy jest opisem formatu dane przesyłane przez sieć jako strumień oktetów. W związku z tym każde narzędzie, które może tworzyć i interpretować wiadomości, które zgodność z tym formatem danych może współpracować z innymi zgodnymi narzędzie niezależnie od języka implementacji

Kilka ważnych rzeczy, które powinieneś wiedzieć:

  1. należy pamiętać, że AMQP to technologia przesyłania wiadomości, która nie implementuje interfejsu JMS API.
  2. JMS to API, a AMQP to protocol.So nie ma sensu mówić, że to, co jest domyślnym protokołem JMS, oczywiście klient aplikacje używają HTTP / S jako protokołu połączenia podczas wywoływania Serwis Internetowy WebLogic.
  3. JMS jest tylko specyfikacją API. Nie używa żadnego protokołu. Dostawca JMS (jak ActiveMQ) może używać dowolnego bazowego protokołu do realizuj JMS API. Dla ex: Apache ActiveMQ może używać dowolnego z następujące protokoły: AMQP, MQTT, OpenWire, REST (HTTP), RSS i Atom, Stomp, WSIF, WS, XMPP. Proponuję przeczytać używając JMS Transport jako połączenie Protokół .

Powodzenia:)

 90
Author: Freak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-05 08:22:58

Zacznijmy od podstaw.

RabbitMQ jest to MOM (Message Oriented Middleware), opracowany z Erlang (język programowania zorientowany na TLC) i implementujący protokół wire AMQP (Advance Message Queuing Protocol). Obecnie wiele klienckich API (np. Java, C++, RESTful, itp.) są dostępne w celu umożliwienia korzystania z komunikatorów RabbitMQ.

JMS (Java Messaging Service) jest standardem JCP definiującym zbiór ustrukturyzowanych API do zaimplementowania przez mamę. Przykładem MOM, który implementuje (tzn. jest kompatybilny z) interfejsy API JMS jest ActiveMQ; jest też HornetMQ i inne. Takie middlewares uzyskać JMS API i wdrożyć wzorce wymiany odpowiednio.

Zgodnie z powyższym, biorąc pod uwagę szkielet API JMS, instancję RabbitMQ i jego klienckie API Javy, możliwe jest opracowanie implementacji JMS wykorzystującej RabbitMQ: jedyną rzeczą, którą trzeba zrobić, w tym momencie, jest implementacja wzór wymiany (over RabbitMQ) zgodnie ze specyfikacją JMS.

Kluczem jest: zestaw API, podobnie jak JMS, może być zaimplementowany bez względu na technologię (W tym przypadku RabbitMQ).

 32
Author: Paolo Maresca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-16 19:10:25

JMS, gdy został zdefiniowany, nie definiował protokołu pomiędzy klientem JMS a serwerem wiadomości. Klient JMS, który implementuje JMS API może używać dowolnego protokołu do komunikacji z serwerem wiadomości. Klient musi tylko być zgodny z JMS api. To wszystko. Zazwyczaj klienci JMS używają niestandardowego protokołu, który rozumie ich serwer wiadomości.

AMQP jest natomiast protokołem pomiędzy klientem wiadomości a serwerem wiadomości. Klient JMS może używać AMQP jako protokołu do komunikować się z serwerem wiadomości. I są tacy klienci.

Http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server

 14
Author: chitakasa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-01 05:48:19
  • gdzie wchodzi w grę JMS API? JMS API powinien używać bibliotek klienckich AMQP do łączenia się z RabbitMQ?
JMS jest API, więc niektóre API JMS są zaimplementowane przez protokół AMQP (jak Apache QPID JMS), podczas gdy większość API JMS używa innych protokołów. Jeśli wersja protokołu AMQP jest taka sama, taki klient powinien być w stanie komunikować się z innym klientem AMQP.
  • Zwykle używamy JMS do łączenia brokerów wiadomości, takich jak RabbitMQ, ActiveMQ, itp. Wtedy jaki jest domyślny protokół używany tutaj zamiast AMQP?

To zależy od twojej konfiguracji tego JMS API. Dla ActiveMQ może to być AMQP , ale domyślnie jest to 'openwire'

 2
Author: Axel Podehl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-07 10:06:38

Https://spring.io/understanding/AMQP

AMQP (Advanced Message Queueing Protocol) to otwarty drut Specyfikacja komunikatów asynchronicznych. Każdy bajt transmitowanego dane są określone. Ta cecha pozwala na zapisanie bibliotek w wielu językach oraz do pracy na wielu systemach operacyjnych i procesorach architektury, co zapewnia prawdziwie interoperacyjną, wieloplatformową standard wiadomości.

AMQP jest często porównywany do JMS (Java Message Service), najczęściej system komunikacyjny w społeczności Java. Ograniczenie JMS polega na tym, że interfejsy API są określone, ale format wiadomości nie jest. W przeciwieństwie do AMQP, JMS nie ma wymogu tworzenia i przesyłania wiadomości. Zasadniczo każdy broker JMS może zaimplementować wiadomości w inny format. Muszą tylko korzystać z tego samego API.

 0
Author: gstackoverflow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-09 15:28:48

Podejrzewam, że możesz szukać tej dokumentacji , która mówi po części:

JMS Client for Vfabric RabbitMQ jest biblioteką kliencką dla vFabric RabbitMQ. Vfabric RabbitMQ nie jest dostawcą JMS, ale posiada funkcje potrzebne do obsługi kolejek JMS i modeli wiadomości tematycznych. Klient JMS dla RabbitMQ implementuje specyfikację JMS 1.1 na RabbitMQ Java client API, umożliwiając tym samym nowe i istniejące JMS aplikacje do łączenia się z brokerami RabbitMQ poprzez Wiadomości Zaawansowane Protokół kolejkowania (AMQP).

 -1
Author: Danger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-16 14:25:21