RabbitMQ wyjaśnione w 5 minut lub mniej

Zobaczymy dzisiaj, jak przyspieszyć czas ładowania stron, wykonując najcięższe przetwarzanie asynchronicznie, a wszystko to zarządzane w bardzo prosty sposób dzięki RabbitMQ.

Stabilność i szybkość działania aplikacji czy strony internetowej to z pewnością jedne z najważniejszych czynników dla użytkowników. Kto nigdy nie opuścił witryny, zanim nie zobaczył pierwszej strony, ponieważ trwało to zbyt długo?

Czym jest RabbitMQ

RabbitMQ to otwarty, rozproszony i skalowalny broker przesyłania wiadomości, który służy jako pośrednik w wydajnej komunikacji między producentami a konsumentami.

RabbitMQ implementuje protokół przesyłania komunikatów w warstwie aplikacji AMQP, który koncentruje się na przekazywaniu komunikatów asynchronicznych z gwarancją dostarczenia poprzez potwierdzenia odbioru komunikatów od brokera do producenta i od konsumentów do producenta.

Jak działa RabbitHQ

RabbitMQ w uproszczony sposób definiuje kolejki, w których będą przechowywane komunikaty wysyłane przez producentów, dopóki konsumujące aplikacje nie pobiorą komunikatu i go nie przetworzą. Pozwala nam projektować i wdrażać systemy rozproszone, w których system podzielony jest na niezależne moduły, które komunikują się ze sobą za pomocą komunikatów.

Jak każda komunikacja, potrzebujemy producenta, przekazu i odbiorcy. Na środku tortu znajduje się RabbitMQ, czyli miejsce, w którym wiadomość czeka na odbiorcę.

Lepiej zrozummy, jak to działa, znając rodzaje wymian reprezentujących wymianę wiadomości.

Typy wymiany

Poprzez giełdy, ilekroć wysyłamy wiadomość przez RabbitMQ, nie wysyłamy jej bezpośrednio do kolejki; aby inne systemy mogły go odczytać, wysyłamy go do centrali, która odpowiada za przekazywanie komunikatów do różnych kolejek.

Źródło obrazu: CloudAQMP

Rodzaje wymiany to Bezpośrednia, Fanout, Temat i Czytelnicy.

Wymiana bezpośrednia

Załóżmy, że producent musi wysłać wiadomość potwierdzającą zakup do trzech konsumentów. Oznacza to, że system musi komunikować się z trzema innymi różnymi systemami, aby dokonać zakupu.

Ponieważ RabbitMQ wysyła wiadomość osobno do każdej kolejki, istnieje impet, aby te inne systemy otrzymały wiadomość bezpośrednio.

Zwykle giełda przekazuje wiadomość do kolejek, ale często nie chcemy, aby nasze wiadomości były wysyłane do wszystkich kolejek. Dlatego istnieje kilka warunków, które możemy zastosować, aby wymiana działała.

Możesz więc wysłać wiadomość tylko do jednego konsumenta; zamiast wysyłać do wszystkich.

Binding Key: Aby połączyć kolejkę z giełdą, musisz utworzyć powiązanie, relację między kolejką a giełdą, na przykład łącznik.

Klucz routingu: W tym powiązaniu możemy również utworzyć element zwany kluczem routingu, który innymi słowy jest kluczem do przekazywania naszych wiadomości do określonej kolejki.

Jeśli masz klucz routingu X, klucz routingu Y i klucz routingu Z, na przykład wiadomość z kluczem routingu Y przejdzie przez kolejkę Y i zostanie dostarczona bezpośrednio do konsumenta zdefiniowanego jako odbiorca wiadomości.

W ten sposób możemy mieć kilka kolejek podłączonych do giełdy, ale jednocześnie mogą one mieć różne relacje z giełdami za pomocą kluczy routingu.

Wymiana fanoutów

Kiedy wiadomość jest wysyłana na giełdę, jest wysyłana do wszystkich kolejek z nią połączonych. Więc jeśli masz 10 kolejek podłączonych do wymiany fanoutów, wszystkie kolejki otrzymają wiadomość, która została wysłana.

Wymiana tematów

Jest to jedna z najbardziej elastycznych giełd, pozwalająca nam na wysyłanie wiadomości według tematu. W oparciu o sposób nazywania kluczy routingu możliwe jest tworzenie wzorców reguł i relacji między systemami.

Na przykład: klucz routingu (x.*); klucz routingu(*.z); klucz routingu (*.y.*).

Co to jest AQMP w RabbitMQ

AMQP (Advanced Message Queuing Protocol) to otwarty protokół przesyłania wiadomości używany do definiowania transportu wiadomości między wieloma aplikacjami. Jest podobny do protokołów HTTP i TCP, ponieważ jest protokołem przewodowym, z wyjątkiem tego, że umożliwia transport asynchroniczny.

RabbitMQ zdecydował się na wdrożenie AMQP z kilku powodów. Po pierwsze, ten protokół jest opisany jako standard dla oprogramowania pośredniczącego, w przeciwieństwie do JMS, który definiuje interfejs API.

Tę specyfikację AMQP napisało międzynarodowe konsorcjum, w skład którego wchodzą duże firmy, takie jak Red Hat, Cisco Systems i Microsoft. Drugim jest interoperacyjność tego protokołu, która pozwala dowolnej aplikacji implementującej AMQP komunikować się z brokerem AMQP.

AMQP nie jest jedynym protokołem używanym przez RabbitMQ. Poniższy obraz przedstawia wszystkie protokoły, języki i interfejsy API zaimplementowane i/lub obsługiwane przez RabbitMQ.

Najlepsze cechy RabbitMQ

Oprócz umożliwienia integracji różnych aplikacji za pośrednictwem wiadomości asynchronicznie iz różnych lokalizacji, RabbitMQ oferuje nam inne funkcje, które uczyniły go bardzo popularnym w świecie brokerów wiadomości:

Niezawodna pamięć masowa

RabbitMQ zawiera kilka funkcji, które pozwalają mu zagwarantować dostarczenie wiadomości. Wśród nich zapewnia przechowywanie, gdy żaden konsument nie może odebrać wiadomości. Pozwala konsumentom zaakceptować dostarczenie wiadomości, aby upewnić się, że została pomyślnie przetworzona.

Jeśli przetwarzanie się nie powiedzie, RabbitMQ umożliwia ponowne umieszczenie wiadomości w kolejce w celu wykorzystania przez inną instancję konsumenta lub ponownego przetworzenia przez tego samego konsumenta, który początkowo nie powiódł się, po odzyskaniu.

RabbitMQ gwarantuje również kolejność dostarczania wiadomości; to znaczy, że są zużywane w tej samej kolejności, w jakiej dotarły do ​​kolejek RabbitMQ.

Tworzenie klastrów

Chociaż RabbitMQ zapewnia doskonałą wydajność, przetwarzając tysiące komunikatów na sekundę, czasami musi być w stanie przetworzyć większą liczbę komunikatów bez wpływu na wydajność aplikacji.

W tym celu RabbitMQ umożliwia tworzenie klastrów skalujących rozwiązanie w poziomie, co jest przejrzyste zarówno dla producentów, jak i konsumentów.

Wysoce dostępne kolejki

W RabbitMQ kolejki mogą być replikowane w wielu węzłach w klastrze, zapewniając, że w przypadku awarii węzła lub przestoju broker może nadal odbierać wiadomości od producentów i dostarczać je do odpowiednich konsumentów.

Elastyczny routing

W RabbitMQ można zdefiniować elastyczne reguły routingu, nawet zgodnie z określonym wzorcem, w celu kierowania wiadomości między giełdami i kolejkami za pośrednictwem powiązań.

Obsługa wielu protokołów

Oprócz obsługi protokołu AMQP, RabbitMQ obsługuje STOMP, MQTT i HTTP za pośrednictwem wtyczek. Zawiera również mechanizmy uwierzytelniania i kontroli dostępu dla każdego komponentu brokera.

Prawdziwe przypadki użycia RabbitMQ

Najważniejsze przypadki użycia RabbitMQ to umożliwienie zagwarantowania asynchroniczności między aplikacjami, zmniejszenie sprzężenia między aplikacjami, dystrybucja alertów i kontrolowanie kolejki zadań w tle.

Jednak praktyczne przypadki użycia RabbitMQ dotyczą handlu elektronicznego, gdzie t służy do manipulowania, przetwarzania i przekazywania zamówień sprzedaży do systemów w innych sektorach, takich jak dystrybucja i wystawianie faktur.

Podczas przetwarzania zamówień możesz przekazać wiadomość sprzedażową do centrum dystrybucji i obszaru fakturowania. W tym schemacie wszystko działa poziomo, zgodnie z asynchronicznym wzorcem wysyłania wiadomości, ale często możliwe jest wysłanie akcji do kilku kolejek.

Wzorem poprzedniego przykładu, funkcja ta może być bardzo przydatna, gdy klient dokonuje zakupu, a produkt wymaga przygotowania do dystrybucji, transportu i wystawienia faktury.

A ponieważ każdy z tych sektorów jest innym systemem, celem RabbitMQ jest przekazywanie wszystkich tych komunikatów do odpowiednich systemów.

Alternatywy dla królika MQ:

RabbitMQ jest o wiele prostszy niż się wydaje i istnieje kilka alternatyw, które obejmują:

# 1. IronMQ

IronMQ to superszybkie oprogramowanie do kolejkowania wiadomości. Jest wysoce dostępny, trwały w konstrukcji i najlepiej do jednorazowej dostawy. IronMQ to najpotężniejsze natywne rozwiązanie chmurowe dla nowoczesnej architektury aplikacji.

Obsługuje kolejki wypychania, kolejki ściągania i długie ankiety, dzięki czemu żądania ankiet są dłużej otwarte. Ponadto może korzystać z wielu centrów danych o wysokiej dostępności, co ułatwia skalowalność.

Możesz wdrażać w chmurze, na udostępnionym lub dedykowanym sprzęcie lub lokalnie. Posiada również szereg bibliotek klienckich z czytelną dokumentacją.

#2. Apache Kafka

Kafka to platforma o silnej pozycji w rozproszonym strumieniowaniu zdarzeń. W swej istocie Kafka jest zaprojektowana jako replikowany, rozproszony, trwały dziennik zatwierdzeń.

Jego największą użytecznością są sterowane zdarzeniami mikrousługi zasilania lub aplikacje do przetwarzania strumieniowego na dużą skalę, automatyczne replikowanie zdarzeń asynchronicznie w klastrze w celu zapewnienia odporności na awarie i wysokiej dostępności.

#3. Apache ActiveMQ

ActiveMQ to wieloprotokołowy broker komunikatów oparty na Javie. Dzięki niemu możemy integrować aplikacje z wykorzystaniem protokołu kolejkowania wiadomości AMQP w warstwie aplikacji.

Implementuje kilka protokołów integracji, takich jak między innymi JMS (natywna Java) i Stomp (który może być używany przez aplikacje PHP).

Ponadto Amazon ma swoją „zarządzaną” wersję o nazwie Amazon MQ, która znacznie ułatwia korzystanie z usługi.

Ostatnie słowa

Brokerzy wiadomości tradycyjnie stanowią ważny element architektury organizacji. Jednak wraz ze wzrostem liczby użytkowników wchodzących do systemów firmowych różnymi kanałami potrzebne są produkty, które pozwolą na skalowanie ich w poziomie przy niskich kosztach. Umożliwienie przetwarzania dużej liczby komunikatów na sekundę.

To tutaj nowa generacja brokerów, takich jak RabbitMQ, staje się coraz bardziej istotna w nowoczesnych aplikacjach, które starają się oferować naszym klientom wysoki poziom dostępności, niezawodności, interoperacyjności i wydajności.

Możesz także zapoznać się z niezawodnymi platformami hostingowymi RabbitMQ dla swojej aplikacji.