JMS java messaging service

27
www.proskar.pl Java Messaging Service Warsztaty PROSKAR

Transcript of JMS java messaging service

Page 1: JMS java messaging service

www.proskar.pl

Java Messaging Service

Warsztaty PROSKAR

Page 2: JMS java messaging service

Plan

1. Wstęp

2. Sposoby komunikacji

• Point-to-point

• Topic

3. Zastosowania JMS

4. Przykładowa aplikacja

www.proskar.pl 2/27

Page 3: JMS java messaging service

Wstęp

• Definicja – Zestaw interfejsów i modeli asynchronicznego przesyłania

komunikatów

– Umożliwia korzystanie z systemów kolejkowania w aplikacjach używających technologii wchodzących w skład specyfikacji JEE

www.proskar.pl 3/27

Schemat działania JMS komunikacji point-to-point

(Źródło www.access.redhat.com)

Page 4: JMS java messaging service

Sposoby komunikacji

www.proskar.pl 4/27

Komunikaty przesyłane są pomiędzy producentem i

konsumentem za pomocą JMS udostępnionego przez serwer aplikacyjny.

Sposoby komunikacji:

• point-to-point

• topic

Page 5: JMS java messaging service

Point-to-point

www.proskar.pl 5/27

Komunikacja pomiędzy dwoma klientami, gdzie producent jest nadawcą, a konsument odbiorcą. Komunikat skonsumowany przed odbiorcę nie jest dłużej przetrzymywany w kolejce.

Producent Kolejka Konsument

Page 6: JMS java messaging service

Topic

www.proskar.pl 6/27

Producent wysyła komunikat na temat (topic), a JMS rozsyła je do subskrybentów. JMS umożliwia szybkie rozsyłanie komunikatu do wielu odbiorców.

Producent

Topic

Subskrybent

Subskrybent

Subskrybent

Page 7: JMS java messaging service

Zastosowania JMS

www.proskar.pl 7/27

• Komunikacja pomiędzy modułami wewnątrz serwera aplikacyjnego

• Komunikacja między modułami na rożnych serwerach aplikacyjnych

• EJB – Komponenty sterowane komunikatami

Page 8: JMS java messaging service

Komunikacja pomiędzy modułami wewnątrz

serwera aplikacyjnego

www.proskar.pl 8/27

• Moduły znajdują się na serwerze aplikacyjnym implementującym standard JMS

• Komunikacja pomiędzy modułami

– Moduł I wysyła komunikat na kolejkę

– Kolejka przechowuje komunikat do skonsumowania przez odbiorcę

– Moduł II konsumuje komunikat i go przetwarza

– Moduł II wysyła odpowiedź

Page 9: JMS java messaging service

www.proskar.pl 9/27

Przykładowy schemat aplikacji w której dwa

moduły komunikują się ze sobą za pomocą JMS.

Moduł I

Moduł II

JMS

Server aplikacyjny

Page 10: JMS java messaging service

Komunikacja pomiędzy modułami na różnych serwerach aplikacyjnych

www.proskar.pl 10/27

– Moduły znajdują się na różnych serwerach aplikacyjnych implementujących standard JMS.

– Oba serwery aplikacyjne maja skonfigurowaną funkcjonalność JMS Bridge odpowiedzialną za komunikowanie się z innymi serwerami.

– Komunikacja odbywa się podobnie jak w przypadku modułów znajdujących się na tym samym serwerze aplikacyjnym. Różnicą jest to, że komunikat kierowany jest poza serwer aplikacyjny.

Page 11: JMS java messaging service

www.proskar.pl 11/27

Przykładowy schemat architektury systemu, którego moduły znajdują się na dwóch serwerach aplikacyjnych, a za komunikację między nimi odpowiada JMS.

Moduł Moduł JMS

Serwer aplikacyjny Serwer aplikacyjny

JMS

Page 12: JMS java messaging service

www.proskar.pl 12/27

Zalety takiego rozwiązania:

– Moduły nie muszą znać swojej struktury, do kolejki wrzucane są gotowe dane do obioru

– W przypadku zmian wprowadzonych na jednym z modułów nie ma potrzeby wprowadzania zmian na drugim (jak ma to miejsce np. przy użyciu WebService).

– Łatwa implementacja kodu odpowiadającego za asynchroniczną komunikację.

Page 13: JMS java messaging service

Komponenty EJB sterowane komunikatami

www.proskar.pl 13/27

– Klasy których metody mogą być wywoływane przez wysyłane do nich komunikaty.

– Z chwilą pojawienia się komunikatu w kolejce, którą obsługuje dany komponent, wywoływana jest odpowiednia metoda komponentu.

– Oferują implementację ułatwiającą budowanie aplikacji z użyciem JMS

• Potwierdzanie odbioru komunikatu

• Przechowywanie danych o nadawcy w komunikacie

Page 14: JMS java messaging service

Realne zastosowanie

www.proskar.pl 14/27

• Kiedy warto używać JMS?

– Odpowiedź z integrowanego modułu zajmuje zbyt dużo czasu

– Z jednego zasobu korzysta wielu klientów

– Wymagana jest asynchroniczna komunikacja np. wyświetlanie szczątkowych wyników operacji

Page 15: JMS java messaging service

• Przykładowy problem

– Aplikacja odpowiedzialna za wyświetlanie historii notowań giełdowych.

– Korzysta z modułu odpowiedzialnego za generowanie historii według podanego filtru.

– W zależności od filtrów wybranych przez użytkownika, generowanie historii może trwać długo.

15/27

Page 16: JMS java messaging service

www.proskar.pl 16/27

• Rozwiązanie:

– Klient ustawia filtr według którego ma zostać wygenerowana historia

– Aplikacja wrzuca na kolejkę in_getHistory obiekt zawierający informacje o zapytaniu klienta

– Moduł odbiera obiekt z kolejki i przetwarza dane.

– W czasie przetwarzania danych na kolejkę wyjściową out_getHistory wrzucane są częściowe wyniki operacji.

– Aplikacja odbiera części przetworzonych danych i drukuje je na ekranie.

Page 17: JMS java messaging service

Przykładowa aplikacja

www.proskar.pl 17/27

Przykładowa aplikacja ukazuje różne sposoby rozsyłania komunikatów JMS. GUI aplikacji został napisany w technologii JSF i składa się z trzech zakładek:

– Queue

– Topic

– Asynchronous

Page 18: JMS java messaging service

Zakładka Queue

www.proskar.pl 18/27

Interfejs zakładki Queue

• Wiadomość wysłana przed użytkownika kierowana na kolejkę a następnie konsumowana.

• Reprezentuje sposób komunikacji point-to-point

Page 19: JMS java messaging service

www.proskar.pl 19/27

Konsument pobiera komunikat z kolejki i dodaje ją do listy

odebranych komunikatów. Wiadomość jest usuwana z kolejki.

Referencje do obiektu kolejki oraz fabryki połączenia z JMS można pobrać z kontekstu JNDI ENC.

Page 20: JMS java messaging service

www.proskar.pl 20/27

JMSProducer jest klasą producenta JMS. Metoda send wysyła komunikat do obiektu podanego w parametrze.

Page 21: JMS java messaging service

www.proskar.pl 21/27

Klasa konsumenta różni się od klasy producenta tylko metodą odbierającą:

Metoda klasy JMSConsumer receiveBodyNoWait jest

odpowiedzialna za pobieranie komunikatu, w odróżnieniu od metody receive nie musi zwracać komunikatu jeżeli kolejka jest pusta.

Page 22: JMS java messaging service

Zakładka Topic

www.proskar.pl 22/27

• Wiadomość jest rozsyłana do wszystkich subskrybentów (odbiorców)

• Korzysta z tematu (topica) udostępnionego na serwerze aplikacyjnym

Interfejs zakładki Topic

Page 23: JMS java messaging service

www.proskar.pl 23/27

Podobnie jak w poprzedniej zakładce należy dokonać

wstrzyknięcia obiektów fabryki połączenia z systemem JMS oraz tematu (Topic).

Wysyłanie komunikatów odbywa się za pomocą metody

obiektu JMSProducer.

Page 24: JMS java messaging service

www.proskar.pl 24/27

Interfejs zakładki Asynchronous

• Asynchroniczne odbieranie wiadomości dzięki klasie MessageListener

• Lista odebranych komunikatów odświeżana jest za pomocą Ajaxa

Page 25: JMS java messaging service

www.proskar.pl 25/27

Przykładowa implementacja klasy nasłuchującej

Odbieranie komunikatów za pomocą klasy MessageListener będącą klasą nasłuchującą. Metoda onMessage wywoływana jest gdy komunikat pojawia się na kolejce.

Page 26: JMS java messaging service

www.proskar.pl 26/27

Dodanie kolejek oraz tematu do pliku wdrożeniowego standalone.xml (WildFly).

Page 27: JMS java messaging service

Podsumowanie

www.proskar.pl 27/27

• Szybki sposób na komunikację pomiędzy modułami aplikacji

• Odporny na modyfikacje

• Umożliwia asynchroniczną wymianę informacji

• Pozwala na komunikację z wieloma klientami jednocześnie

• Zbyt uzależniony od implementacji JMS serwera aplikacyjnego na którym się znajduje

• Konieczność tworzenia dużej ilości kolejek przy większych systemach