Pod koniec maja świetnie spędziłem czas w Wielkiej Brytanii dostarczając consulting. Tuż po nim zacząłem myśleć o podzieleniu się ideą aplikacji middleware zbudowanej na ActiveMQ z funkcjami Camela. Spędziłem kilka dni tworząc wystarczający przykład.
Czym jest middleware?
Middleware jest ogólnym terminem traktującym o oprogramowaniu które jest pewnego rodzaju pośrednikiem między systemami. Po cóż? - możesz zapytać. Generalnie ponieważ komunikacja pomiędzy punktami nie jest najlepsza do budowania większych aplikacji, co więcej niektóre komponenty pomiędzy komunikującymi pozwalają wstrzykiwać nową logikę bez zmieniania systemów komunikujących się. Czy możesz wyobrazić sobie sytuację gdzie wiele systemów tworzy komunikaty i wielu konsumentów tych komunikatów stworzonych w różnych językach? To jest typowy scenariusz gdzie middleware będzie użyteczne. Istnieje wiele narzędzi middleware i kilka ich kategorii, w tym wpisie dowiemy się jak używać ActiveMQ do budowania message oriented middleware. Co oznacza termin MOM? To, że mamy asynchroniczną komunikację bez bezpośrednich wywołań metod. Producent nic nie wie o konsumencie i na odwrót. Jeśli jesteś zainteresowany MOM-ami - zajrzyj do książki “ActiveMQ in Action” (napisanej przez commiterów ActiveMQ) z wydawnictwa Manning, w której termin ten jest opisany szerzej.
Scenariusz
W naszym scenariuszu będziemy mieli kilka kolejek, każdy klient będzie posiadał własną kolejkę i konsumował komunikaty tylko z niej. Producent będzie wysyłał komunikaty z nagłówkiem, który będzie użyty to stworzenia nazwy kolejki klienta. Wewnątrz będziemy używać Apache Camel, który będzie przetwarzał wiadomości przychodzące i rozsyłał je do kolejek konkretnych klientów. Camel będzie również kopiował komunikaty do kolejki z logami dla procesu audytującego (niewymieniony na diagramie).
Jako alternatywę zamierzam wam pokazać jak pobrać identyfikator klienta z treści komunikaty zamiast zmuszać producenta do używania nagłówków.
Stawianie ActiveMQ
Jeśli jesteś użytkownikiem Linuxa bądź MacOSa możesz użyć menadżera paczek brew by zainstlować activemq następującym poleceniem: [source lang=“bash”]brew install activemq[/source] Pozostali użytkownicy mogą pobrać dystrybucję ActiveMQ ze strony projektu.
Mamy zainstalowane ActiveMQ, w następnym kroku stworzymy testową instancję brokera, którą wykorzystamy do modyfikacji konfiguracji. Aby stworzyć instancję należy wywołać polecenie:
[source lang=“bash”]activemq-admin create mom[/source]
Po wykonaniu tego polecenia powinniście otrzymać następującą strukturę katalogów
Nie będziemy używać wszystkich plików, zatem w moim setupie zostaną usunięte następujące pliki:
- Ponieważ jeszcze nie używamy SSL:
- broker.ks
- broker.ts
- Ponieważ nie zabezpieczamy brokera:
- credentials.properties
- Ponieważ nie będziemy używać konsoli webowej:
- jetty-realm.properties
- jetty.xml
Te pliki są niepotrzebne w tej chwili w naszej instalacji.
Konfiguracja ActiveMQ
Ponieważ skrypt activemq-admin tworzy domyślną konfigurację brokera będziemy musieli ją nieco zmodyfikować. Pamiętaj aby wstawiać elementy w XML w porządku alfabetycznym. Od wydania 5.4 elementy w konfiguracji ActiveMQ są uporządkowane.. Na początku zmienimy element destinationPolicy:
[source lang=“xml” highlight=“4,5”]
Druga zmiana to dodanie w konfiguracji pre definiowanych destynacji.
[source lang=“xml”]
Owe destynacje zostaną stworzone podczas uruchomienia brokera, nawet jeśli nie będzie konsumentów i producentów. Po tych zmianach możemy wystartować naszego brokera następującym poleceniem:
[source lang=“bash”]$ACTIVEMQ_HOME/bin/mom console[/source]
Z poziomu VisualVM możemy sprawdzić które destynacje zostały stworzone. Po uruchomieniu narzędzia monitorującego po prostu wybieramy lokalny proces org.apache.activemq.console.Main, który powinien być wyświetlony po wykonaniu powyższego polecenia.
To wszystko jeśli idzie o ustawienia ActiveMQ. Jeśli trafiłeś na problemy ze zmianami w konfiguracji możesz je pobrać bezpośrednio z repozytorium git bądź pobrać archiwum zip | archiwum tar w przypadku gdy nie masz klienta git.
- Część 1: Building sample middleware - broker
- Część 2: Building sample middleware - struktury danych
- Część 3: Building sample middleware - producent
- Część 4: Building sample middleware - camel
- Część 5: Building sample middleware - konsument
- Część 6: Building sample middleware - audyt