Artykuły / Apache ActiveMQ ™ - otwarty pośrednik komunikatów

6023f2b0-a139-8798-479e-41fd285273f4

Bezpośrednim konkurentem dla kuriera komunikatów RabbitMQ jest system Apache ActiveMQ ™, napisany w języku Java i implementujący standard Java Message Service (JMS).

Cechy Apache ActiveMQ ™

System ten jest bardzo podobny RabbitMQ pod względem możliwości – również pełni rolę pośrednika komunikatów (ang. message broker), a mianowicie:

  • posiada dużą liczbę dostępnych klientów napisanych w najpopularniejszych językach programowania,
  • obsługuje kilka formatów wymiany danych, między innymi: OpenWire, REST, Stomp, WS Notification, XMPP, AMQP 1.0;
  • posiada intuicyjny panel administracyjny pozwalający monitorować działanie serwera, domyślnie dostępny pod adresem http://localhost:8161/admin/
  • umożliwia zastosowanie dowolnej bazy danych jako warstwy przechowującej dane (ang. persistence),
  • potrafi działać w klastrze (ang. cluster), czyli w środowisku rozproszonym pozwalającym na skalowanie infrastruktury.

Konsola administracyjna systemu ActiveMQ

Konsola administracyjna systemu ActiveMQ - Lista kolejek

ActiveMQ posiada również szereg innych cech, często powiązanych z tym, że został napisany w Javie i jest integrowany z oprogramowaniem napisanym również w tym języku np. wsparcie dla frameworka Spring.

Obsługa Java Message Service

W przypadku obsługi standardu JMS ActiveMQ posiada dwa modele korzystania z kolejek:

  • pierwszy z nich to wzorzec Point-to-Point, znany również jako Producent-Konsument występujący również w protokole AMQP 0-8-x/0-9-x, w którym nadawca przesyła dane bezpośrednio do konkretnej kolejki komunikatów, skąd też odbiorca je pobiera; zasadą jest, że pojedynczy komunikat jest przesyłany tylko do jednego odbiorcy, podczas gdy producentów jak i konsumentów może być wielu; odbiorca potwierdza odebranie komunikatu z kolejki; w przypadku, gdy nie ma żadnego aktywnego odbiorcy, komunikaty są gromadzone w kolejce i czekają na jego pojawienie się;
  • drugi wzorzec to Wydawca-Subskrybent, również znany z protokołu AQMP 0-8x/0-9-x;. w przypadku JMS dostarczany jest on w postaci centrali komunikatów Topic; charakteryzuje się on tym, że komunikaty mogą być tracone jeśli nie zgłasza się po nie żaden odbiorca nie jest zarejestrowany; wydawca komunikatów i ich subskrybent nie posiadają informacji o sobie nawzajem;

Wybór pomiędzy systemem ActiveMQ i RabbitMQ jest kwestią preferencji i w dużej mierze zależy od specyfiki projektu, który mamy realizować. Jeśli projekt będzie pisany w Javie to wybór zapewne padnie w stronę ActiveMQ, choć nie jest to przesądzone, bo RabbitMQ świetnie radzi sobie w kooperacji również i z tym językiem.

Tomasz Kuter

Web Developer z ponad 8-letnim, komercyjnym doświadczeniem w tworzeniu stron i aplikacji internetowych oraz paneli administracyjnych w PHP, JavaScript, HTML i CSS.
Aktualnie zainteresowany architekturą mikroserwisów, które umożliwiają budowanie skalowalnych aplikacji internetowych.