Próbuję zrozumieć, co 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)
- RabbitMQ używa protokołu AMQP (raczej implementuje protokół AMQP)
- Klienci Java muszą używać bibliotek klienta protokołu AMQP, aby łączyć się / używać RabbitMQ
- Gdzie tu chodzi o JMS API? Interfejs JMS API powinien używać bibliotek klienta AMQP do łączenia się z RabbitMQ?
- Zwykle używamy JMS do łączenia się z brokerami wiadomości, takimi jak RabbitMQ, ActiveMQ itp. W takim razie jaki jest domyślny protokół używany tutaj zamiast AMQP?
Niektóre z powyższych mogą być głupie. :-) Ale próbuję objąć to głową.
Odpowiedzi:
Twoje pytanie jest trochę nieuporządkowane i przypomina trudne pytanie w arkuszu z pytaniami :) (Ponieważ nauczyciele zawsze starają się zadawać proste, skomplikowane pytania: Mam nadzieję, że nie jesteś nauczycielem :)) Zobaczmy je wszystkie jeden po drugim.
Jak wiesz:
Interfejs API Java Message Service (JMS) to interfejs API Java Message Oriented Middleware (MOM) służący do wysyłania komunikatów między dwoma lub większą liczbą klientów . JMS jest częścią Java Platform, Enterprise Edition i jest zdefiniowany przez specyfikację opracowaną w ramach Java Community Process jako JSR 914. Jest to standard przesyłania wiadomości, który umożliwia tworzenie komponentów aplikacji opartych na Java Enterprise Edition (Java EE), wysyłać, odbierać i czytać wiadomości. Pozwala na luźne powiązanie, niezawodność i asynchroniczność komunikacji między różnymi komponentami aplikacji rozproszonej .
Teraz (z Wikipedii ):
I najważniejsze (znowu z Wikipedii):
Kilka ważnych rzeczy, które powinieneś wiedzieć:
Powodzenia :)
źródło
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP
: Nie. To nie jest poprawne.JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.
: Nie. To nie jest poprawne. JMS to tylko specyfikacja API. Nie używa żadnego protokołu. Dostawca JMS (taki jak ActiveMQ) może używać dowolnego bazowego protokołu do realizacji interfejsu API JMS. Na przykład: Apache ActiveMQ może korzystać z dowolnego z następujących protokołów: AMQP, MQTT, OpenWire, REST (HTTP), RSS i Atom, Stomp, WSIF, WS Notification, XMPP.Zacznijmy od podstaw.
RabbitMQ to MOM (Message Oriented Middleware), opracowane w Erlang (język programowania zorientowany na TLC) i implementujące protokół przewodowy AMQP (Advance Message Queuing Protocol). Obecnie dostępnych jest wiele interfejsów API klienta (np. Java, C ++, RESTful itp.), Które umożliwiają korzystanie z usług przesyłania wiadomości RabbitMQ.
JMS (Java Messaging Service) to standard JCP definiujący zestaw strukturalnych interfejsów API do zaimplementowania przez MOM. Przykładem MOM, który implementuje (tj. Jest kompatybilny) API JMS, jest ActiveMQ; jest też HornetMQ i inne. Takie oprogramowanie pośredniczące pobiera interfejsy API JMS i odpowiednio implementuje wzorce wymiany.
Zgodnie z powyższym, biorąc pod uwagę szkielet interfejsów API JMS, instancję RabbitMQ i jego API klienta Java, możliwe jest opracowanie implementacji JMS z wykorzystaniem RabbitMQ: jedyną rzeczą, jaką należy teraz zrobić, jest zaimplementowanie wzorzec wymiany (przez RabbitMQ) zgodnie ze specyfikacją JMS.
Klucz jest taki: zestaw API, taki jak JMS, można zaimplementować niezależnie od technologii (w tym przypadku RabbitMQ).
źródło
JMS, gdy został zdefiniowany, nie definiował protokołu między klientem JMS a serwerem przesyłania wiadomości. Klient JMS, który implementuje interfejs API JMS, może używać dowolnego protokołu do komunikacji z serwerem przesyłania komunikatów. Klient musi tylko być zgodny z interfejsem API JMS. To wszystko. Zwykle klienci JMS używają niestandardowego protokołu zrozumiałego dla ich serwera przesyłania wiadomości.
Z drugiej strony AMQP jest protokołem między klientem obsługi wiadomości a serwerem obsługi wiadomości. Klient JMS może używać protokołu AMQP jako protokołu do komunikacji z serwerem obsługi komunikatów. A tacy klienci są dostępni.
http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server
źródło
JMS jest interfejsem API, więc niektóre interfejsy API JMS są implementowane za pośrednictwem protokołu AMQP (np. Apache QPID JMS ), podczas gdy większość interfejsów API JMS korzysta z innych protokołów. Jeśli wersja protokołu AMQP jest taka sama, taki klient powinien mieć możliwość komunikacji z innym klientem AMQP.
Zależy to od konfiguracji tego interfejsu API JMS. W przypadku ActiveMQ może to być AMQP, ale domyślnie jest to „openwire”
źródło
Chcę zasugerować artykuł, który bardzo mi pomógł w zrozumieniu różnicy między AMQP a JMS.
Oto link do artykułu: http://www.wmrichards.com/amqp.pdf
źródło
https://spring.io/understanding/AMQP
źródło
Podejrzewam, że możesz szukać tej dokumentacji, która częściowo mówi:
źródło