Jaka jest różnica między Java RMI a JMS?

Podczas projektowania rozproszonej aplikacji w Javie wydaje się, że istnieje kilka technologii, które rozwiązują ten sam problem. Przeczytałem krótko o Java Remote Method Invocation i Java Message Service , ale trudno dostrzec różnicę. Wydaje się, że Java RMI jest silniej sprzężona niż JMS, ponieważ JMS używa komunikacji asynchronicznej, ale poza tym nie widzę większych różnic.

    Jaka jest różnica między nimi?
  • jest jednym z są nowsze od innych?
  • który z nich jest bardziej powszechny/popularny w przedsiębiorstwach?
  • jakie korzyści mają nad sobą?
  • kiedy jedno jest lepsze od drugiego?
  • czy różnią się znacznie tym, jak trudne są do wdrożenia?

Myślę również, że Web Services i CORBA rozwiązują ten sam problem.

Author: Jonas, 2010-04-05

4 answers

Naprawdę nie można porównać tych dwóch, jabłek i pomarańczy.

RMI jest formą zdalnego wywołania procedury (RPC). Jest to lekkie, specyficzne dla Javy API, które oczekuje, że dzwoniący i odbiornik będą dostępne w momencie komunikacji.

JMS jest niezawodnym komunikacyjnym API. Dostawcy JMS istnieją dla różnych systemów wiadomości. Wiadomości mogą być przekazywane, nawet jeśli jedna ze stron nie jest dostępna, jeśli dostawca to realizuje. Dwa, które znam, to TIBCO i IBM MQ.

RMI nie zajmuje się gwarantowaną dostawą lub asynchronicznymi odpowiedziami, JMS może, w zależności od dostawcy.

JMS umożliwia luźne sprzężenie w sensie dostępności. "Usługi internetowe" pozwalają na luźne łączenie w sensie protokołu i danych, ale nie określają zbyt wiele w sposób niezawodnego przesyłania wiadomości, chociaż niektóre implementacje To zawierają (Windows Communication Foundation), a niektóre nie.

EDITED: Revised per comments. Kiedy pisałem tę odpowiedź w 2010 roku mój doświadczenie było w rzeczywistości tylko z jednym dostawcą JMS i nie wiedziałem, że nie ma domyślnego dostawcy JMS.

 30
Author: codenheim,
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-09-18 20:01:28

Już wiesz o wywołaniach metod. Co zrobić, jeśli obiekt, na którym chcesz wywołać metodę, znajduje się na innym komputerze? Używasz RMI do wysyłania połączenia z jednego komputera (klienta) do drugiego (serwera). Klient będzie czekać (lub "blokować"), aż wynik wróci z serwera. Jest to operacja synchroniczna .

JMS jest inny: pozwala jednemu komputerowi wysłać wiadomość do innego-jak e-mail. Pierwszy nie musi czekać na odpowiedź: może zachować robi, co chce. Może nawet nie być odpowiedzi. Oba systemy komputerowe niekoniecznie działają dokładnie w kroku, więc nazywa się to asynchronicznym .

Inny sposób myślenia o różnicy: RMI jest jak wykonywanie połączenia telefonicznego, a JMS jest jak wysyłanie wiadomości tekstowej.

RMI jest trochę starszy niż JMS, ale to nie jest naprawdę istotne. Te dwa pojęcia są znacznie starsze niż java.

Nie ma dużej różnicy w złożoności. Myślę, że ty powinieneś spróbować zrobić samouczek na każdym z nich. RMI i JMS

Jeśli rozpoczynasz projekt od zera i nie wiesz, którego z nich użyć, prawdopodobnie problem synchroniczny / asynchroniczny jest najlepszym czynnikiem decyzyjnym. Jeśli pracujesz nad istniejącym systemem, prawdopodobnie najlepiej nie wprowadzać zbyt wielu nowych technologii. Więc jeśli już go używają, to sugeruję, że najlepiej będzie trzymać się tego.

 40
Author: John,
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
2010-04-05 01:12:43

Remote method Invocation (RMI) : 1.Natywny interfejs RPC Javy 2.Zdalne obiekty mogą być uruchamiane z semantyką podobną do lokalnych obiektów 3.Domyślna implementacja używa zastrzeżonego binarnego protokołu komunikacyjnego, ale RMI może być zaimplementowane przez SOAP

Java Messaging System (JMS) 1.Interfejs i specyfikacja Javy do Message Oriented Middleware 2.Pakiety danych mogą być wysyłane do kolejek wiadomości i tematów, gdzie będą obsługiwane asynchronicznie. Na kolejki lub tematy nie muszą być zdalne 3.Serwer JMS może używać RMI, SOAP itp.

 8
Author: giri,
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
2010-04-05 03:49:19
  • RMI są używane do komunikacji między sobą ściśle sprzężonych aplikacji, a nie JMS używanych do luźno sprzężonych.
  • RMI używane do asynchronicznie (real time chat), ale JMS używane do obu synchronicznie (offline chat).

  • W RMI, głównie obiekt serializacji, ale w JMS może być nie need for it

Oto więcej szczegółów na temat powyższych terminologii

Jakie jest znaczenie luźno i ściśle powiązane w RMI i JMS?

Messaging umożliwia komunikację rozproszoną, która jest luźno sprzężona. Komponent wysyła wiadomość do miejsca docelowego, a odbiorca może ją pobrać z miejsca docelowego. Jednak nadawca i odbiorca nie muszą być dostępne w tym samym czasie, aby komunikować się. W rzeczywistości nadawca nie musi wiedzieć cokolwiek o odbiorcy; ani odbiorca nie musi wiedzieć nic o nadawcy. Nadawca i odbiorca muszą wiedzieć tylko co format wiadomości i przeznaczenie. Pod tym względem wiadomości różnią się od ściśle powiązanych technologii, takich jak Remote Method Invocation (RMI), które wymagają od aplikacji znajomości metod aplikacji zdalnej.

 -1
Author: Yasir Shabbir Choudhary,
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-09-08 10:42:06