W bieżącym artykule przedstawiam najważniejsze aspekty projektu Spring AMQP.
Nie jest to poradnik o korzystaniu z dobrodziejstw AMQP, tylko raczej zajawienie dobrego pomysłu
na rozpoczęcie przygody z kolejkami (i nie tylko) w Springu.
Jeśli szukasz wygodnego i nieskomplikowanego rozwiązania w tym obszarze, Spring AMQP może być strzałem w dziesiątkę.
Projekt Spring AMQP stosuje podstawowe koncepcje Springa do opracowywania rozwiązań komunikacyjnych opartych na AMQP.
Appa Notka.
AMQP to otwarta standardowa specyfikacja do asynchronicznej komunikacji komunikatów.
Innymi słowy, jest to zaawansowany protokół kolejkowania wiadomości.
Zawiera opis, jak należy skonstruować wiadomość.
Spring AMQP zapewnia „szablon” (template) jako abstrakcję do wysyłania i odbierania wiadomości.
Umożliwia również obsługę POJO sterowanych komunikatami (
Message-driven POJOs) z „kontenerem nasłuchującym”.
Wszystko dzieje się z wykorzystaniem wstrzykiwania zależności i konfiguracji deklaratywnej.
Projekt składa się z dwóch części, gdzie
spring-amqp to podstawowa abstrakcja, a
spring-rabbit to implementacja RabbitMQ.
Appa Notka.
RabbitMQ to oprogramowanie opensource umożliwiające wymianę wiadomości (exchange), między innymi za pomocą kolejek (queues).
Czym jest kolejka? Rozwiązanie polegające na asynchronicznej wymianie komunikatów pomiędzy producentem a klientem (consumer).
Dzieje się to za pośrednictwem serwera kolejek (broker wiadomości).
Asynchroniczność, w skrócie, polega na tym, że samo wysłanie wiadomości na kolejkę
wcale nie oznacza jej automatycznego przetworzenia (i np. zapisania danych). Dzieje się to dopiero wtedy,
gdy konsument jest dostępny i odbiera dane z kolejki. Dzięki temu nawet jeśli konsument przez jakiś czas nie działa,
żadne dane nie zostają utracone. Po pojawieniu się odbiorcy dane zostają do niego wysłane. W przypadku gdy było wiele komunikatów,
ich kolejność jest zachowywana (to jest podstawowy wariant - trzeba pamiętać, że kolejność zależy też od typu kolejki).
Istotne pojęcia
W kontekście kolejek przewija się zwykle kilka pojęć, które warto znać, aby lepiej rozumieć takie rozwiązania.
- Queue – kolejka przechowująca komunikaty
- Exchange - obsługuje zadania wymiany wiadomości
- Message - komunikat wysyłany na kolejkę przez producenta, który następnie jest odbierany przez konsumenta
- Routing key - adres komunikatu
Oczywiście elementy te znajdujemy również w omawianym RabbitMQ.
Podstawowe elementy Spring AMQP
Spring AMQP składa się z trzech zasadniczych elementów:
- Kontener nasłuchujący do asynchronicznego przetwarzania wiadomości przychodzących
- RabbitTemplate do wysyłania i odbierania wiadomości
- RabbitAdmin do automatycznego deklarowania kolejek, wymian i wiązań
Konfiguracja
Przykładowa klasa konfiguracyjna jest pokazana na Springowym Githubie:
Konfiguracja kontenera nasłuchującego:
Konfiguracja producenta wiadomości:
Wysyłanie i odbieranie wiadomości
Samo wysłanie wiadomości jest bardzo proste:
Podobnie jest z odbieraniem wiadomości:
Maven Dependency
Podsumowanie
W rozdziale przedstawiłem ogólny opis Spring AMQP oraz kilka podstawowych elementów kodu z wykorzystaniem tego rozwiązania.
Mam nadzieję, że temat zainteresował Cię na tyle, aby przyjrzeć się mu nieco bliżej.
Przypominam, że pełny kod źródłowy jest dostępny w projekcie na GitHub-ie.
Autor: Jarek Klimas
Data: 04 grudnia 2021
Labele:Backend, Poziom średniozaawansowany, Java, Spring, Kolejki
Linki:
https://spring.io/projects/spring-amqp#overview
https://github.com/spring-projects/spring-amqp-samples
https://www.rabbitmq.com
Masz pytanie odnośnie zagadnienia omawianego w artykule?
Coś, co napisaliśmy, nie zaspokoiło Twojego głodu wiedzy?
Daj nam znać co myślisz i skomentuj artykuł na facebooku!