RabbitMQ

Czym jest RabbiMQ?

RabbitMQ jest systemem pośredniczącym w wymianie wiadomości – jest czymś w rodzaju komunikatora, który przekazuje wiadomości z jednego miejsca w drugie. Komunikatem może być ciąg znaków o dowolnej długości, wiadomość tekstowa czy też dane w formacie JSON.

Wyobraźmy sobie sytuację, gdy system obsługujący przykładowo portal społecznościowy, w ciągu jednej godziny musi wysłać kilka milionów powiadomień do użytkowników – niemożliwym do zrealizowania byłoby wysłanie takiej ilości powiadomień w krótkim czasie przy małej ilości serwerów. Zwiększenie liczby serwerów wiązałoby się zaś z tym, że w godzinach, w których portal ma mniej użytkowników, większość z serwerów nie byłaby w ogóle używana. W takim przypadku z pomocą przychodzi nam asynchroniczność i system kolejkowy.

Jak działa system kolejkowy?

System kolejkowy składa się z producenta (ang. publisher), centrali wiadomości (ang. exchange), kolejek (ang. queue) oraz konsumentów (ang. consumer).

Najpierw wiadomość od producenta trafia do centrali wiadomości, która odpowiada za przydzielenie wiadomości do odpowiedniej kolejki (ang. binding). Następnie konsument dzięki połączeniu z RabbitMQ odbiera z kolejki wiadomości i wykonuje swoje zadanie (każda kolejka może mieć dowolną ilość konsumentów!). W taki sposób każdy z serwerów może działać jednocześnie przy równomiernym obciążeniu.

Typy centrali

Wyróżniamy kilka typów centrali wiadomości, które przydzielają wiadomości do odpowiednich kolejek na postawie określonych parametrów.

Centrala wiadomości bezpośrednich (ang. direct exchange) – aby wiadomość została przydzielona do konkretnej kolejki, musi posiadać odpowiednią wartość parametru routing key, zgodną z wartością parametru binding key.

Centrala wiadomości tematycznych (ang. topic exchange) – działa podobnie jak centrala typu direct, jednak parametr dopasowujący wiadomość do centrali (binding key) nie jest już konkretną wartością a wyrażeniem składającym się ze słów rozdzielonych kropkami oraz z następujących znaków:

  • * zastępuje dokładnie jedno słowo
  • # zastępuje dowolną liczbę słów oraz oddzielających ich kropek

Centrala wiadomości z nagłówkami (ang. headers exchange) – działa podobnie jak centrala typu direct, jednak w tym przypadku routing key jest zupełnie ignorowany, a wiadomość przydzielana jest do danej kolejki na podstawie nagłówka wysyłanego wraz z wiadomością. Typy wartości przekazywanych w nagłówku:

  • any – wystarczy aby jeden nagłówek wiadomości pasował do nagłówka kolejki
  • all – wszystkie przesłane z wiadomością nagłówki muszą się zgadzać z parametrami kolejki

Centrala rozgłośni wiadomości (ang. fanout exchange) – w tym przypadku podczas przydzielania wiadomości do kolejek nie są brane pod uwagę żadne parametry – wiadomości trafiają do wszystkich aktywnych kolejek.

Podsumowanie

RabbitMQ to narzędzie, które pozwala zarządzać kolejkami czyli operacjami asynchronicznymi. Dzięki niemu w przypadku wystąpienia dużej ilości operacji jednocześnie możemy rozłożyć działania na pewną ilość konsumentów, zapobiegając jednocześnie obciążeniu serwera.

Leave a Comment

Your email address will not be published. Required fields are marked *