Rzeczywiste wykorzystanie JMS / kolejek komunikatów? [Zamknięte]

182

Właśnie czytałem abit o JMS i Apache ActiveMQ. I zastanawiał się, do czego ludzie w świecie rzeczywistym używają JMS lub podobnych technologii kolejki komunikatów?

nos
źródło

Odpowiedzi:

191

JMS (ActiveMQ jest implementacją brokera JMS) może być wykorzystywany jako mechanizm umożliwiający asynchroniczne przetwarzanie żądań. Możesz to zrobić, ponieważ wypełnienie wniosku zajmuje dużo czasu lub faktyczne żądanie może być zainteresowane przez kilka stron. Innym powodem korzystania z niego jest umożliwienie wielu klientom (potencjalnie napisanym w różnych językach) uzyskiwanie dostępu do informacji za pośrednictwem JMS. ActiveMQ jest tutaj dobrym przykładem, ponieważ można użyć protokołu STOMP, aby umożliwić dostęp z klienta C # / Java / Ruby.

Przykładem w świecie rzeczywistym jest aplikacja internetowa służąca do złożenia zamówienia dla konkretnego klienta. W ramach składania tego zamówienia (i przechowywania go w bazie danych) możesz wykonać szereg dodatkowych zadań:

  • Przechowuj zamówienie w jakimś zewnętrznym systemie zaplecza (takim jak SAP)
  • Wyślij wiadomość e-mail do klienta, aby poinformować go, że zamówienie zostało złożone

Aby to zrobić, kod aplikacji opublikuje komunikat w kolejce JMS, który zawiera identyfikator zamówienia. Jedna część aplikacji nasłuchującej w kolejce może odpowiedzieć na zdarzenie, przyjmując orderId, sprawdzając zamówienie w bazie danych, a następnie składając je w innym systemie zewnętrznym. Inna część wniosku może być odpowiedzialna za przyjęcie zamówienia i wysłanie wiadomości e-mail z potwierdzeniem do klienta.

Jon
źródło
Cześć @jon, widziałeś ten znacznik Dokumentacja? stackoverflow.com/documentation/jms/commit potrzebują tylko jednego modułu zatwierdzającego, aby włączyć ten temat, myślę, że możesz być tym, który pozwala im udostępniać niesamowite dokumenty na temat JMS
juanmf
@Jon rozumiem, czy sam Jms jest implementacją wzorca integracji korporacyjnej?
valik
Nie, Mule lub Wielbłąd będą ...
Jon
1
Jeśli jakaś liczba aplikacji może zużywać wiadomości w kolejce, to skąd kolejka wie, kiedy usunąć stare wiadomości?
Basil Bourque,
95

Używaj ich cały czas, aby asynchronicznie przetwarzać długotrwałe operacje. Użytkownik sieci nie będzie chciał czekać dłużej niż 5 sekund na przetworzenie żądania. Jeśli masz taki, który działa dłużej, jeden projekt polega na przesłaniu żądania do kolejki i natychmiastowym odesłaniu adresu URL, który użytkownik może sprawdzić, aby zobaczyć, kiedy zadanie zostanie zakończone.

Publikuj / subskrybuj to kolejna dobra technika oddzielania nadawców od wielu odbiorców. Jest to elastyczna architektura, ponieważ subskrybenci mogą przychodzić i odchodzić w razie potrzeby.

duffymo
źródło
41
Po przeczytaniu twojej odpowiedzi dodam JMS do mojej kolejki „Czego nauczę się w tym roku” :)
Roman
W naszych czasach zamiast używać specyfikacji JMS, możemy używać asynchronicznych wywołań metod. Aby uzyskać więcej informacji, zobacz: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo
3
Nie są do końca takie same. Nie ma gwarantowanej dostawy z wywołaniem metody asynchronicznej; brak pojęcia tematów, które można wysłać do kilku słuchaczy jednocześnie.
duffymo
75

Miałem tak wiele niesamowitych zastosowań dla JMS:

  • Komunikacja za pośrednictwem czatu dla obsługi klienta.

  • Debugowanie logowania na wewnętrznej bazie danych. Wszystkie serwery aplikacji emitowały komunikaty debugowania na różnych poziomach. Następnie można uruchomić klienta JMS, aby sprawdzał komunikaty debugowania. Jasne, że mogłem użyć czegoś takiego jak syslog , ale dało mi to wiele sposobów filtrowania danych wyjściowych na podstawie informacji kontekstowych (np. Według nazwy serwera aplikacji, wywołania interfejsu API, poziomu dziennika, identyfikatora użytkownika, typu komunikatu itp.). Ja również pokolorowałem wyjście.

  • Debugowanie logowania do pliku. Tak jak powyżej, tylko określone elementy zostały wyciągnięte za pomocą filtrów i zalogowane do pliku w celu ogólnego logowania.

  • Alarmowanie Ponownie, podobna konfiguracja do powyższego logowania, sprawdzanie konkretnych błędów i ostrzeganie ludzi za pomocą różnych środków (e-mail, SMS, IM, wyskakujące okienko Growl ...)

  • Dynamicznie konfiguruj i kontroluj klastry oprogramowania. Każdy serwer aplikacji wyemituje komunikat „Skonfiguruj mnie”, a następnie demona konfiguracji, który odpowie komunikatem zawierającym wszelkiego rodzaju informacje o konfiguracji. Później, jeśli wszystkie serwery aplikacji wymagałyby natychmiastowej zmiany konfiguracji, można to zrobić z demona konfiguracji.

  • I zwykłe - kolejkowane transakcje opóźnionych działań, takich jak fakturowanie, przetwarzanie zamówień, obsługa administracyjna, generowanie wiadomości e-mail ...

Jest świetny wszędzie tam, gdzie chcesz zagwarantować asynchroniczne dostarczanie wiadomości.

mikesomeone
źródło
5
Używanie JMS do rejestrowania debugowania nie wydaje mi się właściwe. Kolejki i wiadomości mają znaczny koszt, a rejestrowanie (w przypadku debugowania, które zwykle loguje się dużo) musi przebiegać jak najszybciej.
Marco Altieri
19

Przetwarzanie synchroniczne rozproszone (a).
Przykładem w świecie rzeczywistym może być platforma powiadomień obejmująca całą aplikację, która wysyła wiadomości e-mail do zainteresowanych stron w różnych punktach podczas korzystania z aplikacji. Tak więc aplikacja działałaby jako Producertworzenie Messageobiektu, umieszczenie go na konkretnym obiekcie Queuei przejście do przodu.
Byłby zestaw osób Consumer, które zasubskrybują to Queuepytanie i zajmą się Messageprzesyłaniem wiadomości. Zauważ, że w trakcie tej transakcji Producers są oddzielane od logiki, w jaki sposób dane Messagebędą obsługiwane.
Struktury przesyłania wiadomości (ActiveMQ i podobne) działają jako kręgosłup ułatwiający takie Messagetransakcje, udostępniając MessageBrokers.

pugmarx
źródło
Chcę przetwarzania asynchronicznego, ponieważ RestService Api jest synchroniczny. Jak to zrobić za pomocą ActiveMq i Jm. Proszę o pomoc. stackoverflow.com/questions/19706788/... . Dzięki za pomoc i czas
Kumar
10

Użyłem go do wysyłania transakcji śróddziennych między różnymi systemami zarządzania funduszami. Jeśli chcesz dowiedzieć się więcej o tym, czym jest świetna technologia przesyłania wiadomości, mogę całkowicie polecić książkę „ Wzorce integracji przedsiębiorstw ”. Istnieje kilka przykładów JMS takich jak żądanie / odpowiedź i publikacja / subskrypcja.

Wiadomości to doskonałe narzędzie do integracji.

RichardOD
źródło
8

Używamy go do inicjowania przetwarzania asynchronicznego, którego nie chcemy zakłócać ani powodować konfliktu z istniejącą transakcją.

Załóżmy na przykład, że masz kosztowną i bardzo ważną logikę, taką jak „kup rzeczy”, ważną częścią kupowanych rzeczy byłoby „powiadom sklep z towarami”. Wywołamy powiadomienie asynchronicznie, aby żadna logika / przetwarzanie biorące udział w powiadomieniu nie blokowało ani nie konkurowało z zasobami z logiką biznesową zakupu. Rezultat końcowy, zakup zakończony, użytkownik jest zadowolony, otrzymujemy nasze pieniądze, a ponieważ kolejka jest gwarantowana dostawa, sklep jest powiadamiany, gdy tylko zostanie otwarty lub gdy pojawi się nowy element w kolejce.

Kevin Williams
źródło
1
Proszę o pomoc. stackoverflow.com/questions/19706788/... . Dziękuję za pomoc i czas.
Kumar
2
Ale ponieważ żądanie jest asynchroniczne, z powodu problemu z siecią wiadomość może nie zostać wysłana. A co z tym? Kiedy chcesz kupić rzeczy, twoje nitowanie musi zostać wysłane. nieprawdaż?
grep
8

Wykorzystałem go w moim projekcie akademickim, który był internetową witryną detaliczną podobną do Amazon. JMS był używany do obsługi następujących funkcji:

  1. Zaktualizuj pozycję zamówień złożonych przez klientów, gdy przesyłka przemieszcza się z jednej lokalizacji do drugiej. Dokonano tego poprzez ciągłe wysyłanie wiadomości do kolejki JMS.
  2. Powiadomienie o wszelkich nietypowych zdarzeniach, takich jak opóźnienie wysyłki, a następnie wysłanie wiadomości e-mail do klienta.
  3. Jeśli dostawa zostanie osiągnięta do miejsca docelowego, wysyłanie zdarzenia dostawy.

Mieliśmy także wielu zaimplementowanych zdalnych klientów podłączonych do głównego serwera. Jeśli połączenie jest dostępne, używają do uzyskania dostępu do głównej bazy danych lub, jeśli nie, do korzystania z własnej bazy danych. Aby obsłużyć spójność danych, wdrożyliśmy mechanizm 2PC. W tym celu wykorzystaliśmy JMS do wymiany komunikatów między tymi systemami, tj. Jednym działającym jako koordynator, który zainicjuje proces, wysyłając wiadomość do kolejki, a inni odpowiedzą odpowiednio, wysyłając ponownie wiadomość w kolejce. Jak już wspomnieli inni, był podobny do modelu pub / sub.

qwerty
źródło
6

Widziałem JMS wykorzystywany w różnych projektach komercyjnych i akademickich. JMS może łatwo wejść w Twoje zdjęcie, gdy chcesz mieć całkowicie oddzielone systemy rozproszone. Mówiąc ogólnie, kiedy trzeba wysłać zapytanie z jednego węzła, a ktoś w sieci zajmuje się tym bez / z podaniem nadawcy jakichkolwiek informacji o odbiorcy.

W moim przypadku wykorzystałem JMS do opracowania oprogramowania pośredniczącego zorientowanego na wiadomości (MOM) w mojej pracy, w którym określone typy obiektów zorientowanych obiektowo są generowane z jednej strony jako żądanie, a następnie kompilowane i wykonywane z drugiej strony jako odpowiedź .

paradisonoir
źródło
6

Wielbłąd Apache używany w połączeniu z ActiveMQ to świetny sposób na tworzenie wzorców integracji w przedsiębiorstwie

Rob Davies
źródło
5

Używamy wiadomości do generowania ofert online

bluegene
źródło
4

Używamy JMS do komunikacji z systemami w ogromnej liczbie zdalnych lokalizacji za pośrednictwem niewiarygodnych sieci. Luźne połączenie w połączeniu z niezawodnym przesyłaniem wiadomości tworzy stabilny krajobraz systemu: każda wiadomość zostanie wysłana, gdy tylko będzie to technicznie możliwe, większe problemy w sieci nie będą miały wpływu na cały krajobraz systemu ...

roundrobin
źródło