Odpowiedzi:
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ń:
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.
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.
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.
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 Producer
tworzenie Message
obiektu, umieszczenie go na konkretnym obiekcie Queue
i przejście do przodu.
Byłby zestaw osób Consumer
, które zasubskrybują to Queue
pytanie i zajmą się Message
przesyłaniem wiadomości. Zauważ, że w trakcie tej transakcji Producer
s są oddzielane od logiki, w jaki sposób dane Message
będą obsługiwane.
Struktury przesyłania wiadomości (ActiveMQ i podobne) działają jako kręgosłup ułatwiający takie Message
transakcje, udostępniając MessageBroker
s.
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.
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.
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:
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.
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ź .
Wielbłąd Apache używany w połączeniu z ActiveMQ to świetny sposób na tworzenie wzorców integracji w przedsiębiorstwie
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 ...