RabbitMQ

juniordevops.pl 5 lat temu

Omówię na tyle na ile potrafię temat kolejkowania zadań (message broker) na przykładzie mechanizmu RabbitMq. Na jakimś etapie rozwoju swojej aplikacji będziesz chciał aby aplikacja zrobiła dwie lub parę rzeczy „na raz”. Można oczywiście skorzystać z programowania asynchronicznego ale jest to sposób uboższy w zastosowaniu. Jest dobry do malutkich innych zadań. W czasie gdzie na topie są micro-serwisy kolejka zadań RabbitMq pozwoli Ci w pełni wykorzystać rozproszony system. W tym momencie możesz zacząć skalować swoją aplikację i rozdzielić zadania na inne maszyny (micro-serwisy).

Oprogramowanie polega na tym ze klient (producer) może się połączyć z serwerem (message broker) a on wysyła wiadomość/zadanie do odbiorcy (consumer). Będę na przemian używał tych wyrazów.

https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html

Wiadomości wysłane z naszego klienta nie od razu trafiają na szynę, są odbierane i przekazywane przez mechanizm zwany „exchange”. Który to podejmuje decyzje gdzie i w jaki sposób rozesłać wiadomość do kolejek. Mamy kilka podstawowych typów (Exchange type): direct, topic, headers i fanout. Możemy tez zdefiniować własną nazwę.

Publish/subscribe – To mechanizm polegający na wysłaniu zadania to wielu odbiorców. Załóżmy ze nasz system wysyła logi z każdego etapu działania. Możemy te logi wysłać na szynę (broker) z której jeden odbiorca pobierze loga i go zapisze na dysku a inny wyświetli na ekranie.
Binding – to relacja między exchange a queue (kolejką)

fanout – Rozsyła wszystkie wiadomości do wszystkich odbiorców jacy się podłączą.

direct – Exchange tego typu adresuje po „binding key” wiadomość do kolejki gdzie „routing key” wskazuję tą samą nazwę.

topic – chyba najbardziej konfigurowalny sposób wywyłania i odbiierania wiadomości. Przy tym sposobie każda wiadomość musi zawierać „routing key”. Klucz te może się składać w wielu słów oddzielonych kropką („log.error.fromApi”). Ograniczeniem jest długość stringa do 255 bitów. Gwiazdka (*) zastępuje wyraz.

Postanowiłem nieinstalować rabbita lokalnie na swojej maszynie, dlatego iż nie lubię sobię zasmiecać systemu a po za tym dobry developer powinien przygotwać środowisko tak aby każdy mógł odpalić jego projekt na swojej maszynie. Więc wybrałem kontener dockera.
Obraz można pobrać ze strony https://hub.docker.com/_/rabbitmq/
Można też od razu uruchomić kontener z odpowiednią dla nas wersją tj z interfejsem web:

docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3-management

Po uruchomieniu kontenera sprawdzamy jaki jest adres IP naszego serwera i uruchamiamy w przeglądarce ten adres z portem 15672.

domyślnie hasło i login to „guest”
Idź do oryginalnego materiału