RabbitMQ - otwarty system pośredniczący w wymianie komunikatów

Logo RabbitMQ

RabbitMQ jest czymś w rodzaju firmy pocztowej, która jest organizacją złożoną nie tylko z placówek pocztowych, ale i całej infrastruktury służącej do przekazywania wiadomości z jednego miejsca na drugie, od nadawcy do odbiorcy.

W RabbitMQ nadawca zwany jest producentem (ang. producer), odbiorca konsumentem (ang. consumer), a wspomniana firma pocztowa to w dużym uproszczeniu kolejka komunikatów (ang. message queue).

Komunikatem może być dowolny ciąg znaków, zatem mogą to być dane w formacie JSON, pliki zakodowane w formie base64, proste wiadomości tekstowe, czy pojedyncze linie tekstu np. logi serwera czy konkretnej aplikacji.

RabbitMQ gromadzi komunikaty i w zależności od rodzaju kolejki, a także jej konfiguracji - może czekać, aż pojawi się ich odbiorca lub odbiorcy; może przekazywać otagowane komunikaty tylko do odpowiednich konsumentów lub nawet odrzucać je jeśli nikt się po nie nie zjawi.

System RabbitMQ z powodzeniem można nazywać pośrednikiem komunikatów oraz kurierem komunikatów.

Słowo komunikat jest tu użyte celowo zamiast słowa wiadomość z uwagi na przyjęte już w literaturze słownictwo w kontekście systemów kolejkowych.

RabbitMQ jest systemem o otwartym kodzie źródłowym, napisanym w języku Erlang. Język ten został zaprojektowany pod kątem aplikacji współbieżnych uruchamianych w środowisku rozproszonym, gdzie szczególnie ważne są takie cechy jak skalowalność, odporność na awarie i długotrwała praca przy dużej liczbie wątków. Erlang został stworzony w firmie Ericsson jeszcze w latach 80-tych przez Joe Armstronga i jest wykorzystywany w dużej mierze w zastosowaniach telekomunikacyjnych.

System RabbitMQ jako pośrednik komunikatów (ang. message broker) implementuje protokół Advanced Message Queuing Protocol (w skrócie AMQP) będący otwartym standardem opisującym protokół warstwy aplikacji dla oprogramowania pośredniczącego w wymianie komunikatów (ang. Message-Oriented Middleware, w skrócie MOM). Nasz kurier komunikatów obsługuje zarówno AMQP w wersjach 0-8, 0-9, 0-9-1 jak i AMQP 1.0, który znacząco różni się od wersji 0-9-1, od którego jest bardziej rozbudowany.

RabbitMQ natywnie pracuje z protokołem AMQP 0-8/0-9-*, zaś pozostałe protokoły są obsługiwane w formie pluginów.

Obsługiwane protokoły

Opisywany pośrednik komunikatów obsługuje również protokoły:

  • STOMP (będący skrótem od Simple (lub Streaming) Text Oriented Message Protocol, znanym również jako TTMP, skoncentrowanym na wymianie danych za pomocą tekstowego formatu (nie binarnego), który z powodzeniem może przeczytać człowiek;
  • MQ Telemetry Transport (w skrócie MQTT) – lekki binarny protokół zdolny do operowania na niewielkich komunikatach lub na łączach o niedużej przepustowości;
  • HTTP – który jest wykorzystywany do łączności za pomocą JSON-RPC, WebSockets, SockJS, a także prostego HTTP API.