ActiveMQ lub RabbitMQ lub ZeroMQ lub [zamknięte]

645

Chętnie poznamy wszelkie zalety i wady ActiveMQ vs RabbitMQ vs ZeroMQ. Informacje o innych interesujących kolejkach wiadomości są również mile widziane.

Abie
źródło
2
Nie znam się na kolejce wiadomości i czytałem więcej o prawdziwym przypadku jej użycia na stackoverflow.com/q/1035949/181870 . Później, gdy przeglądałem tematy / artykuły związane z kolejką komunikatów (w szczególności JMS), natknąłem się na OpenJMS - implementację Open Source API specyfikacji Java Message Service API 1.1 firmy Sun Microsystems. Dziwi mnie to, że nie jest tu omówione / omówione? Chciałem tylko sprawdzić ze społecznością, czy OpenJMS jest związany z tym tematem / dyskusją, a jeśli tak, to według OP, wszelkie doświadczenia z zaletami i wadami tego samego pomogłyby.
Gnanam,
3
3 lata później uwaga dla osób przeglądających tutaj ... pomyśl o DLACZEGO chcesz użyć oprogramowania pośredniego do kolejkowania wiadomości. Jeśli powodem jest podział zadań w klastrze, spójrz na Selera. Działa na wyższym poziomie abstrakcji niż rozwiązania w stylu MQ, używa RabbitMQ do przenoszenia wiadomości, ale ma znakomitą obsługę semantyki specyficznej dla zadania.
Chris Johnson

Odpowiedzi:

342

Edycja: Moja pierwotna odpowiedź była silnie skoncentrowana na AMQP. Postanowiłem przepisać go, aby zaoferować szersze spojrzenie na ten temat.

Te 3 technologie przesyłania wiadomości mają różne podejście do budowy systemów rozproszonych:

RabbitMQ jest jedną z wiodących implementacji protokołu AMQP (wraz z Apache Qpid). Dlatego implementuje architekturę brokera, co oznacza, że ​​wiadomości są kolejkowane w centralnym węźle przed wysłaniem do klientów. Takie podejście sprawia, że ​​RabbitMQ jest bardzo łatwy w użyciu i wdrażaniu, ponieważ zaawansowane scenariusze, takie jak routing, równoważenie obciążenia lub trwałe kolejkowanie komunikatów są obsługiwane w zaledwie kilku wierszach kodu. Jednak sprawia też, że jest mniej skalowalny i „wolniejszy”, ponieważ centralny węzeł dodaje opóźnienie, a koperty wiadomości są dość duże.

ZeroMq to bardzo lekki system przesyłania wiadomości zaprojektowany specjalnie dla scenariuszy o wysokiej przepustowości / niskim opóźnieniu, takich jak ten, który można znaleźć w świecie finansów. Zmq obsługuje wiele zaawansowanych scenariuszy przesyłania wiadomości, ale w przeciwieństwie do RabbitMQ, większość z nich będziesz musiał zaimplementować, łącząc różne elementy frameworka (np. Gniazda i urządzenia). Zmq jest bardzo elastyczny, ale musisz zapoznać się z około 80 stronami przewodnika (które polecam dla każdego, kto pisze system rozproszony, nawet jeśli nie używasz Zmq), zanim będziesz w stanie zrobić coś bardziej skomplikowanego niż wysyłanie wiadomości od 2 rówieśników.

ActiveMQ znajduje się na środku ziemi. Podobnie jak Zmq, można go wdrożyć z topologiami brokera i P2P. Podobnie jak RabbitMQ, łatwiej jest wdrożyć zaawansowane scenariusze, ale zwykle kosztem surowej wydajności. To szwajcarski scyzoryk do przesyłania wiadomości :-).

Wreszcie wszystkie 3 produkty:

  • mieć api klienta dla najpopularniejszych języków (C ++, Java, .Net, Python, Php, Ruby,…)
  • mieć silną dokumentację
  • są aktywnie wspierani
Julien
źródło
22
Chociaż jest to prawda, nie jestem pewien, czy przyjęcie AMQP ma silną korelację z pierwotnym pytaniem. Sądzę, że przy wyborze kolejki komunikatów ważniejsze są rozważenia niż to, jakiego protokołu przewodowego używa.
StaxMan
8
Pytanie nie wspomina o wymaganiu AMQP, ale ta odpowiedź dotyczy AMQP. Gdybyśmy przyjęli JMS jako wymaganie, odpowiedź byłaby w zasadzie odwrotna: ActiveMQ jest najbardziej popularny, RabbitMQ ma pewne wsparcie, które prawdopodobnie powinno działać. Jeśli nie założono protokołu przewodowego: patrz inne odpowiedzi.
Fletch
19
Po pracy w RabbitMQ i ActiveMQ polecam trzymać się z dala od ActiveMQ. Wydania są bardzo błędne i nie miałem końca problemów z awariami maszyn i przeciekami pamięci itp. Z drugiej strony RabbitMQ po prostu działa. Po podłączeniu go NIGDY nie musiałem już na to patrzeć. Po prostu robi to, czego potrzebuje. Jeśli chcesz, mam prosty samouczek RabbitMQ
Kelly,
2
Po przyjrzeniu się ofertom pracy dla RabbitMQ w porównaniu z ActiveMQ, RabbitMQ wydaje się być bardziej poszukiwany. ActiveMQ istnieje już dłużej, ale jest prawie tak samo wymagany przez pracodawców.
1
Przewodnik po ZMQ to także naprawdę zabawna i dobra lektura :)
meawoppl
174

Dlaczego tęskniłeś za Sparrow , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ ?

Serwery kolejek wiadomości

Serwery kolejek wiadomości są dostępne w różnych językach: Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling lub Sparrow), Scala (Kestrel, Kafka) lub Java (ActiveMQ). Krótki przegląd można znaleźć tutaj

Wróbel

  • napisane przez Alex MacCaw
  • Sparrow to lekka kolejka napisana w języku Ruby, która „mówi memcache”

Szpak

  • napisane przez Blaine Cook na Twitterze
  • Starling to serwer kolejki wiadomości oparty na MemCached
  • napisane w Ruby
  • przechowuje zadania w pamięci (kolejka komunikatów)
  • dokumentacja: kilka dobrych samouczków, na przykład relacja o szpakach i pracy lub ten post na blogu o szpakach

Pustułka

  • napisane przez Robeya Pointera
  • Klon Starling napisany w Scali (port Starling od Ruby do Scali)
  • Kolejki są przechowywane w pamięci, ale logowane na dysku

RabbitMQ

  • RabbitMQ to serwer kolejki wiadomości w Erlang
  • przechowuje zadania w pamięci (kolejka komunikatów)

Apache ActiveMQ

  • ActiveMQ to broker komunikatów typu open source w Javie

Beanstalkd

Amazon SQS

Kafka

  • Napisane na LinkedIn w Scali
  • Używany przez LinkedIn do odciążenia przetwarzania wszystkich stron i innych widoków
  • Domyślnie używa trwałości, używa pamięci podręcznej dysku systemu operacyjnego dla gorących danych (ma wyższą przepustowość niż którakolwiek z powyższych z włączoną trwałością)
  • Obsługuje zarówno przetwarzanie on-line, jak i off-line

ZMQ

  • Biblioteka gniazd, która działa jako struktura współbieżności
  • Szybszy niż TCP, dla produktów klastrowych i superkomputerów
  • Przenosi wiadomości między inproc, IPC, TCP i multicast
  • Połącz N-do-N poprzez fanout, pubsub, potok, żądanie-odpowiedź
  • Asynch I / O dla skalowalnych wielordzeniowych aplikacji do przekazywania wiadomości

EagleMQ

  • EagleMQ jest otwartym, wydajnym i lekkim menedżerem kolejek.
  • Napisane w C
  • Przechowuje wszystkie dane w pamięci i wspiera trwałość.
  • Ma własny protokół. Obsługuje pracę z kolejkami, trasami i kanałami.

IronMQ

  • IronMQ
  • Napisane w Go
  • W pełni zarządzana usługa kolejki
  • Dostępne zarówno w wersji chmurowej, jak i lokalnej

Mam nadzieję, że to nam pomoże. źródło

Andriej Andruszkiewicz
źródło
Czy masz pomysł / pomysł, aby dodać / skomentować moje pytanie zadane tutaj w polu komentarza do tego pytania - stackoverflow.com/questions/731233/... ?
Gnanam
Czy mają zarządzanie rywalizacją? Zawsze znajdowałem ten problem z systemami kolejek. Na przykład blokowanie producenta, jeśli kolejka jest pełna na podstawie liczby elementów (nie zasobów pamięci).
sw.
1
queues.io - Pamiętaj o dodaniu brakujących szczegółów vs.
asyncwait
83

Więcej informacji niż chciałbyś wiedzieć:

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes


AKTUALIZACJA

Właśnie rozwijam to, co Paweł dodał w komentarzu. Wspomniana strona jest martwa po 2010 roku, więc przeczytaj ją szczyptą soli. Wiele rzeczy zostało zmienionych w ciągu 3 lat.

Historia strony Wiki

FlySwat
źródło
7
Myślę, że ci faceci źle myślą o kolejkach - kolejki nie powinny wynosić 1 (lub więcej) na użytkownika. Powinni stawiać swoją pracę w kilku kolejkach, a następnie wykorzystywać. skrzynki odbiorcze (lub mbox) dla każdego użytkownika.
Michael Deardeuff,
1
Michael - chcesz trochę rozwinąć? Problemem jest dostarczanie w czasie rzeczywistym w systemie opartym na czacie grupowym. Jeśli dobrze rozumiem, mówisz o trwałym mechanizmie przechowywania wiadomości jako punktu końcowego (skrzynki odbiorczej)? Jeśli tak, to nie pasuje do rachunku, chcą, aby czat był dostarczany natychmiast, a klienci byli bezpośrednimi subskrybentami? O ile mogę stwierdzić, że mnóstwo kolejek tematycznych nie jest zoptymalizowanym przypadkiem użycia?
Josh
1
Aktualizacja: Ta strona wiki SecondLife została napisana w 2009 r. Do tej pory, w 2013 r., Wiele konkretnych punktów wspomnianych na temat różnych kolejek wiadomości, które badali, nie jest już aktualnych, z powodu ciągłych ulepszeń wszystkich MQ. Większość lub wszystkie testowane przez siebie MQ są w pewnym sensie lepsze.
Paul Legato,
71

To zależy od twojego przypadku użycia.

Porównanie 0MQ z ActiveMQ lub RabbitMQ jest niesprawiedliwe. ActiveMQ i RabbitMQ to systemy przesyłania wiadomości wymagające instalacji i administracji. Oferują one znacznie więcej niż ZeroMQ. Mają prawdziwe trwałe kolejki, obsługę transakcji itp.

ZeroMQ to lekka implementacja gniazd zorientowana na komunikaty. Nadaje się również do programowania asynchronicznego w trakcie procesu. Możliwe jest uruchomienie „Enterprise Messaging System” na ZeroMQ, ale trzeba by dużo zaimplementować samodzielnie.

Więc:

ActiveMQ, RabbitMQ, Websphere MQ i MSMQ to „Kolejki wiadomości dla przedsiębiorstw”

ZeroMQ to biblioteka IPC zorientowana na komunikaty.

sanosdole
źródło
7
Możesz użyć więcej niż jednego. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge mówi o tym, jak użyć 0MQ do połączenia między kilkoma brokerami RabbitMQ i utworzenia luźno powiązanej federacji.
Michael Dillon
34

Nie ma porównania między RabbitMQ i ActiveMQ tutaj . Po wyjęciu z pudełka ActiveMQ jest skonfigurowany tak, aby gwarantować dostarczanie wiadomości - co może sprawiać wrażenie powolnego w porównaniu do mniej niezawodnych systemów przesyłania wiadomości. Zawsze możesz zmienić konfigurację wydajności, jeśli chcesz, i uzyskać co najmniej tak dobrą wydajność, jak każdy inny system przesyłania wiadomości. Przynajmniej masz tę opcję. Na forach i często zadawanych pytaniach na temat ActiveMQ znajduje się wiele informacji na temat konfiguracji skalowania, wydajności i wysokiej dostępności. Ponadto ActiveMQ będzie obsługiwał AMQP 1.0, gdy specyfikacja zostanie sfinalizowana, wraz z innymi formatami przewodowymi, takimi jak STOMP.

Kolejnym plusem dla ActiveMQ jest projekt Apache, więc społeczność programistów jest różnorodna - i nie jest powiązana z jedną firmą.

Rob Davies
źródło
22

Nie korzystałem z ActiveMQ ani RabbitMQ, ale użyłem ZeroMQ. Duża różnica, jaką widzę między ZeroMQ i ActiveMQ itp., Polega na tym, że 0MQ jest bez brokera i nie ma wbudowanej niezawodności do dostarczania wiadomości. Jeśli szukasz łatwego w użyciu interfejsu API obsługi wiadomości obsługującego wiele wzorców przesyłania, transportów, platform i powiązań językowych, zdecydowanie warto sprawdzić 0MQ. Jeśli szukasz platformy komunikacyjnej z pełną funkcjonalnością, 0MQ może nie pasować do rachunku.

Widzieć www.zeromq.org/docs:cookbook na dużo przykładów jak 0MQ mogą być użyte.

Z powodzeniem używam 0MQ do przekazywania wiadomości w aplikacji do monitorowania zużycia energii elektrycznej (patrz http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ )

Bob Scott
źródło
14

Używam zeroMQ. Chciałem prostego systemu przekazywania wiadomości i nie potrzebuję komplikacji brokera. Nie chcę też dużego systemu korporacyjnego zorientowanego na Javę.

Jeśli potrzebujesz szybkiego, prostego systemu i potrzebujesz obsługi wielu języków (używam C i .net), to polecam przyjrzeć się 0MQ.

Nacięcie
źródło
Również używając ZMQ w środowisku C / C ++. Bardzo szybki. Używanie wzorca brokera. Dobre dopasowanie do naszej aplikacji VOIP-watch-dog w czasie rzeczywistym, wykonującej mikro-pmty dla farm serwerów SIP Kamailio. Jestem całkiem pewien, że mógłbym napisać bardzo wyrafinowanego brokera za pomocą ZMQ, ale oceniłbym kilka dodatkowych produktów przed zaangażowaniem się w to.
10

Mogę dodać tylko 2 centy o ActiveMQ, ale ponieważ jest to jeden z najpopularniejszych:

Język, w którym chcesz pisać, może być ważny. Mimo że ActiveMQ ma większość klientów, ich implementacja w C # jest daleka od ukończenia w porównaniu z biblioteką Java.

Oznacza to, że niektóre podstawowe funkcje są niestabilne (protokół przełączania awaryjnego, który ... no cóż ... w niektórych przypadkach kończy się niepowodzeniem, brak obsługi ponownej dostawy), a innych po prostu nie ma. Ponieważ .NET nie wydaje się być tak ważny dla projektu, rozwój jest raczej powolny i wydaje się, że nie ma żadnego planu wydania. Bagażnik jest często zepsuty, więc jeśli weźmiesz to pod uwagę, możesz rozważyć przyczynienie się do projektu, jeśli chcesz, aby wszystko poszło do przodu.

Potem jest sam ActiveMQ, który ma wiele fajnych funkcji, ale także kilka bardzo dziwnych problemów. Używamy wersji Activemq Fuse (Progress) ze względów stabilności, ale nawet wtedy istnieje kilka dziwnych „błędów”, o których należy pamiętać:

  • Brokerzy, którzy w niektórych przypadkach przestają wysyłać wiadomości
  • Błędy dziennika powodujące, że kolejka wyświetla komunikaty, których już nie ma (nie są dostarczane do konsumenta, ale nadal)
  • Priorytet nadal nie jest wdrażany (znajduje się na liście problemów od początku rodzaju ludzkiego)
  • itd itd.

W sumie jest to całkiem fajny produkt, jeśli możesz żyć z jego problemami:

A) nie bój się aktywnie angażować podczas korzystania z .NET
B) rozwijaj w Javie ;-)

Noctris
źródło
5
Niewielka aktualizacja: Od pewnego czasu KahaDB jest domyślnym sklepem trwałości dla ActiveMQ. Jednak: w ogóle nie jest stabilny. W naszych testach widzieliśmy uszkodzenia bazy danych (niektóre odtwarzalne, inne kosztują nas około 15 000 000 wiadomości) UWAGA!
Noctris
8

ZeroMQ ma naprawdę zero kolejek! To naprawdę błąd! Nie ma kolejek, tematów, wytrwałości, niczego! Jest to tylko oprogramowanie pośrednie dla API gniazd. Jeśli to, co wyglądasz fajnie! w przeciwnym razie zapomnij o tym! to nie jest jak activeMQ lub rabbitmq.

Angek
źródło
8

Istnieje porównanie funkcji i wydajności RabbitMQ ActiveMQ i QPID podane na stronie
stronie http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

Osobiście wypróbowałem wszystkie powyższe trzy. RabbitMQ jest według mnie najlepszą pod względem wydajności, ale nie ma opcji przełączania awaryjnego i odzyskiwania. ActiveMQ ma najwięcej funkcji, ale działa wolniej.

Aktualizacja: HornetQ jest również opcją, na którą możesz spojrzeć, jest to skarga JMS, lepsza opcja niż ActiveMQ, jeśli szukasz rozwiązania opartego na JMS.

sheki
źródło
6

O moich początkowych doświadczeniach dotyczących AMQP, Qpid i ZeroMQ pisałem tutaj: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Moja subiektywna opinia jest taka, że ​​AMQP jest w porządku, jeśli naprawdę potrzebujesz stałych narzędzi do przesyłania wiadomości i nie martwisz się, że pośrednik może być wąskim gardłem. Ponadto brakuje obecnie klienta C ++ dla AMQP (Qpid nie uzyskał mojego wsparcia; nie jestem pewien co do klienta ActiveMQ), ale być może trwają prace. ZeroMQ może być inaczej.

Ron
źródło
6

Korzystam z ActiveMQ w środowisku produkcyjnym od około 3 lat. Chociaż wykonuje zadanie, ustawianie wersji bibliotek klienta, które działają poprawnie i są wolne od błędów, może stanowić problem. Chcieliśmy obecnie przejść na RabbitMQ.

Kelly
źródło
5

W komentarzach tego postu na blogu jest trochę dyskusji na temat pisania przez Twittera własnej kolejki wiadomości, co może być interesujące.

Steve przeprowadził szeroko zakrojone testy obciążeń i obciążeń ActiveMQ, RabbitMQ itp. ActiveMQ jest w rzeczywistości dość wolny (znacznie wolniejszy niż Kestrel), RabbitMQ konsekwentnie zawiesza się ze zbyt dużą liczbą producentów i zbyt małą liczbą konsumentów.

Prawdopodobnie początkowo nie będziesz mieć obciążenia podobnego do Twittera :)

crb
źródło
5

Niewiele aplikacji ma tyle konfiguracji strojenia, co ActiveMQ. Niektóre cechy wyróżniające ActiveMQ to:

Konfigurowalny rozmiar pobierania wstępnego. Konfigurowalne gwintowanie. Konfigurowalne przełączanie awaryjne. Konfigurowalne powiadomienie administracyjne dla producentów. ... szczegóły na:

http://activemq.net/blog http://activemq.apache.org

cobrien
źródło
0

Abie, wszystko sprowadza się do twojego przypadku użycia. Zamiast polegać na czyimś koncie dotyczącym przypadku użycia, możesz opublikować swój przypadek użycia na liście dyskusyjnej królików. Pytanie na Twitterze również da ci kilka odpowiedzi. Najlepsze życzenia, Alexis


źródło
0

O ZeroMQ aka 0MQ, jak już zapewne wiesz, to ten, który dostarczy ci najwięcej wiadomości na sekundę (były one około 4 milionów na sekundę na ich serwerze referencyjnym podczas ostatniego sprawdzania), ale jak już wiesz, dokumentacja nie istnieje. Trudno będzie ci znaleźć sposób na uruchomienie serwerów, nie mówiąc już o tym, jak z nich korzystać. Myślę, że częściowo dlatego nikt jeszcze nie wniósł wkładu w 0MQ.

Baw się dobrze!

Charle
źródło
11
Przykłady znajdują się w książce kucharskiej zeromq.org/docs:cookbook oraz w podręczniku api.zeromq.org/zmq.html .
Nick
7
podczas gdy zmq jest szybki i ma łatwy interfejs API, pamiętaj o tym: bez wytrwałości, bez transakcji. Brak wykrycia sfałszowanych lub powolnych konsumentów (wiadomości są po prostu usuwane bez powiadomienia programu producenta). Sidenote: zmq nie wymaga serwera, więc nie znajdziesz dokumentów do uruchamiania serwerów. Mają serwer proxy, jeśli potrzebujesz czegoś takiego.
nos
0

Jeśli interesują Cię również komercyjne wdrożenia, powinieneś rzucić okiem na Nirvana z moich kanałów .

Nirvana jest intensywnie wykorzystywana w branży usług finansowych do tworzenia platform obrotu i dystrybucji cen na małą skalę na dużą skalę.

Obsługiwana jest szeroka gama języków programowania klienta w domenach korporacyjnych, internetowych i mobilnych.

Możliwości klastrowania są niezwykle zaawansowane i warto je sprawdzić, jeśli dla Ciebie ważne jest transparentne HA lub równoważenie obciążenia.

Nirvana można pobrać bezpłatnie w celach programistycznych.

Eddie McDaid
źródło
2
Powinno to mieć zastrzeżenie, że jest to promocja pracownika mojego kanału.
Baron Schwartz