ActiveMQ oder RabbitMQ oder ZeroMQ oder [geschlossen]


645

Wir wären interessiert, Erfahrungen mit den Vor- und Nachteilen von ActiveMQ vs RabbitMQ vs ZeroMQ zu hören. Informationen zu anderen interessanten Nachrichtenwarteschlangen sind ebenfalls willkommen.


2
Ich bin neu in der Nachrichtenwarteschlange und habe unter stackoverflow.com/q/1035949/181870 mehr über den tatsächlichen Anwendungsfall gelesen . Später, als ich nach Themen / Artikeln im Zusammenhang mit der Nachrichtenwarteschlange (insbesondere JMS) googelte , stieß ich auf OpenJMS - eine Open-Source-Implementierung der Java Message Service API 1.1-Spezifikation von Sun Microsystems. Was mich überrascht ist, dass es hier nicht behandelt wird? Ich wollte mich nur bei der Community erkundigen, ob OpenJMS mit diesem Thema / dieser Diskussion zusammenhängt, und wenn ja, würden laut OP alle Erfahrungen mit Vor- und Nachteilen derselben helfen.
Gnanam

3
3 Jahre später ein Hinweis für Leute, die hier stöbern ... Überlegen Sie, WARUM Sie Middleware für Nachrichtenwarteschlangen verwenden möchten. Wenn der Grund darin besteht, Aufgaben innerhalb eines Clusters zu verteilen, schauen Sie sich Sellerie an. Es arbeitet auf einer höheren Abstraktionsebene als Lösungen im MQ-Stil, verwendet RabbitMQ zum Verschieben von Nachrichten, bietet jedoch hervorragende Unterstützung für aufgabenspezifische Semantik.
Chris Johnson

Antworten:


342

Bearbeiten: Meine erste Antwort hatte einen starken Fokus auf AMQP. Ich habe beschlossen, es neu zu schreiben, um eine breitere Sicht auf das Thema zu bieten.

Diese drei Messaging-Technologien verfolgen unterschiedliche Ansätze beim Aufbau verteilter Systeme:

RabbitMQ ist eine der führenden Implementierungen des AMQP-Protokolls (zusammen mit Apache Qpid). Daher wird eine Brokerarchitektur implementiert, dh Nachrichten werden auf einem zentralen Knoten in die Warteschlange gestellt, bevor sie an Clients gesendet werden. Dieser Ansatz macht die Verwendung und Bereitstellung von RabbitMQ sehr einfach, da erweiterte Szenarien wie Routing, Lastausgleich oder dauerhafte Nachrichtenwarteschlange in nur wenigen Codezeilen unterstützt werden. Es macht es jedoch auch weniger skalierbar und "langsamer", da der zentrale Knoten die Latenz erhöht und die Nachrichtenumschläge ziemlich groß sind.

ZeroMq ist ein sehr leichtes Messaging-System, das speziell für Szenarien mit hohem Durchsatz und geringer Latenz entwickelt wurde, wie sie in der Finanzwelt zu finden sind. Zmq unterstützt viele erweiterte Messaging-Szenarien, aber im Gegensatz zu RabbitMQ müssen Sie die meisten selbst implementieren, indem Sie verschiedene Teile des Frameworks kombinieren (z. B. Sockets und Geräte). Zmq ist sehr flexibel, aber Sie müssen die etwa 80 Seiten des Handbuchs (das ich jedem empfehlen sollte, der ein verteiltes System schreibt, auch wenn Sie Zmq nicht verwenden) lesen, bevor Sie etwas Komplizierteres als das Senden von Nachrichten ausführen können zwischen 2 Peers.

ActiveMQ ist in der Mitte. Wie Zmq kann es sowohl mit Broker- als auch mit P2P-Topologien bereitgestellt werden. Wie bei RabbitMQ ist es einfacher, erweiterte Szenarien zu implementieren, jedoch normalerweise auf Kosten der Rohleistung. Es ist das Schweizer Taschenmesser für Nachrichten :-).

Schließlich alle 3 Produkte:

  • habe Client-APIs für die gängigsten Sprachen (C ++, Java, .Net, Python, Php, Ruby, ...)
  • haben starke Dokumentation
  • werden aktiv unterstützt

22
Ich bin mir zwar nicht sicher, ob die Einführung von AMQP in starkem Zusammenhang mit der ursprünglichen Frage steht. Ich würde denken, dass es wichtigere Überlegungen für die Auswahl einer Nachrichtenwarteschlange gibt als das zugrunde liegende Drahtprotokoll, das sie verwendet.
StaxMan

8
In der Frage wird nicht erwähnt, dass AMQP erforderlich ist, aber diese Antwort konzentriert sich auf AMQP. Wenn wir JMS als Voraussetzung annehmen würden, wäre die Antwort im Grunde genommen umgekehrt: ActiveMQ ist am beliebtesten, RabbitMQ hat eine Unterstützung, die wahrscheinlich funktionieren sollte. Wenn kein Kabelprotokoll angenommen wird: siehe andere Antworten.
Fletch

19
Nachdem Sie in RabbitMQ und ActiveMQ gearbeitet haben, würde ich Ihnen empfehlen, sich von ActiveMQ fernzuhalten. Die Releases sind sehr fehlerhaft, und ich hatte unzählige Probleme mit Maschinenausfällen und Speicherlecks usw. RabbitMQ hingegen funktioniert einfach. Nachdem ich es eingesteckt hatte, musste ich es NIE wieder anschauen. Es macht einfach das, was es braucht. Wenn Sie möchten, habe
Kelly

2
Nach einem Blick auf die Stellenangebote für RabbitMQ im Vergleich zu ActiveMQ scheint RabbitMQ viel gefragter zu sein. ActiveMQ gibt es schon länger, aber es wird von Arbeitgebern fast genauso häufig angefordert.

1
Der Leitfaden für ZMQ ist auch wirklich eine lustige und gute Lektüre :)
Meawoppl

174

Warum haben Sie Sparrow , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ vermisst ?

Nachrichtenwarteschlangenserver

Nachrichtenwarteschlangenserver sind in verschiedenen Sprachen verfügbar: Erlang (RabbitMQ), C (Beanstalkd), Ruby (Starling oder Sparrow), Scala (Kestrel, Kafka) oder Java (ActiveMQ). Eine kurze Übersicht finden Sie hier

Spatz

  • geschrieben von Alex MacCaw
  • Sparrow ist eine leichte Warteschlange in Ruby, die "Memcache spricht".

Star

Turmfalke

  • geschrieben von Robey Pointer
  • Starling-Klon in Scala geschrieben (eine Portierung von Starling von Ruby bis Scala)
  • Warteschlangen werden im Speicher gespeichert, aber auf der Festplatte angemeldet

RabbitMQ

  • RabbitMQ ist ein Message Queue Server in Erlang
  • speichert Jobs im Speicher (Nachrichtenwarteschlange)

Apache ActiveMQ

  • ActiveMQ ist ein Open Source-Nachrichtenbroker in Java

Bohnenstange

Amazon SQS

Kafka

  • Geschrieben bei LinkedIn in Scala
  • Wird von LinkedIn verwendet, um die Verarbeitung aller Seiten und anderer Ansichten zu verlagern
  • Standardmäßig wird Persistenz verwendet. Verwendet den Festplatten-Cache des Betriebssystems für heiße Daten (hat einen höheren Durchsatz als alle oben genannten, bei denen die Persistenz aktiviert ist).
  • Unterstützt sowohl die Online- als auch die Offline-Verarbeitung

ZMQ

  • Die Socket-Bibliothek, die als Parallelitäts-Framework fungiert
  • Schneller als TCP, für Clusterprodukte und Supercomputing
  • Überträgt Nachrichten über Inproc, IPC, TCP und Multicast
  • Verbinden Sie N-zu-N über Fanout, Pubsub, Pipeline, Anfrage-Antwort
  • Asynch I / O für skalierbare Multicore-Apps zur Nachrichtenübermittlung

EagleMQ

  • EagleMQ ist ein Open Source, leistungsstarker und leichter Warteschlangenmanager.
  • Geschrieben in C.
  • Speichert alle Daten im Speicher und unterstützt die Persistenz.
  • Es hat ein eigenes Protokoll. Unterstützt die Arbeit mit Warteschlangen, Routen und Kanälen.

IronMQ

  • IronMQ
  • Geschrieben in Go
  • Vollständig verwalteter Warteschlangendienst
  • Verfügbar sowohl als Cloud-Version als auch vor Ort

Ich hoffe, dass dies für uns hilfreich sein wird. Quelle


Haben Sie eine Idee / einen Gedanken zum Hinzufügen / Kommentieren meiner im Kommentarbereich dieser Frage gestellten Frage hier - stackoverflow.com/questions/731233/… ?
Gnanam

Haben sie ein Konfliktmanagement? Ich habe dieses Problem immer bei Warteschlangensystemen gefunden. Beispiel: Blockieren eines Produzenten, wenn die Warteschlange basierend auf der Anzahl der Elemente (nicht auf Speicherressourcen) voll ist.
sw.

1
queues.io - Fügen Sie Details hinzu, die dort oder hier fehlen.
Asyncwait

83

Mehr Informationen als Sie wissen möchten:

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


AKTUALISIEREN

Ich erarbeite nur, was Paulus im Kommentar hinzugefügt hat. Die oben erwähnte Seite ist nach 2010 tot, lesen Sie also mit einer Prise Salz. Viele Dinge wurden in 3 Jahren geändert.

Geschichte der Wiki-Seite


7
Ich denke, diese Leute denken über falsche Warteschlangen nach - Warteschlangen sollten nicht 1 (oder mehr) pro Benutzer sein. Sie sollten ihre Arbeit in ein paar Warteschlangen stellen und dann nutzen. Posteingänge (oder Mboxes) für jeden Benutzer.
Michael Deardeuff

1
Michael - willst du noch etwas näher darauf eingehen? Das Problem ist die Echtzeitzustellung in einem Gruppenchat-basierten System. Wenn ich das richtig verstehe, sprechen Sie von einem dauerhaften Speichermechanismus für Nachrichten als Endpunkt (Posteingang)? Wenn ja, dann passt es nicht zur Rechnung, sie möchten, dass der Chat sofort geliefert wird und die Kunden direkte Abonnenten sind? Soweit ich das beurteilen kann, ist eine Menge themenbasierter Warteschlangen kein optimierter Anwendungsfall?
Josh

1
Update: Diese SecondLife-Wiki-Seite wurde 2009 geschrieben. Bis jetzt, 2013, sind viele der spezifischen Punkte, die in Bezug auf die verschiedenen untersuchten Nachrichtenwarteschlangen erwähnt wurden, nicht mehr aktuell, da alle MQs ständig verbessert wurden. Die meisten oder alle von ihnen getesteten MQs sind inzwischen in gewissem Sinne besser.
Paul Legato

71

Es hängt wirklich von Ihrem Anwendungsfall ab.

Der Vergleich von 0MQ mit ActiveMQ oder RabbitMQ ist nicht fair. ActiveMQ und RabbitMQ sind Messaging-Systeme, die Installation und Verwaltung erfordern. Sie bieten mehr als ZeroMQ. Sie haben echte dauerhafte Warteschlangen, Unterstützung für Transaktionen usw.

ZeroMQ ist eine leichtgewichtige nachrichtenorientierte Socket-Implementierung. Es eignet sich auch für die asynchrone In-Process-Programmierung. Es ist möglich, ein "Enterprise Messaging System" über ZeroMQ auszuführen, aber Sie müssten viel selbst implementieren.

Damit:

ActiveMQ, RabbitMQ, Websphere MQ und MSMQ sind "Enterprise Message Queues".

ZeroMQ ist eine nachrichtenorientierte IPC-Bibliothek.


7
Sie können mehrere verwenden. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge erläutert, wie Sie mit 0MQ mehrere RabbitMQ-Broker überbrücken und einen lose gekoppelten Verband erstellen können.
Michael Dillon

34

Es gibt einen Vergleich zwischen RabbitMQ und ActiveMQ hier . ActiveMQ ist sofort konfiguriert, um die Zustellung von Nachrichten zu gewährleisten. Dies kann den Eindruck erwecken, dass es im Vergleich zu weniger zuverlässigen Nachrichtensystemen langsam ist. Sie können die Konfiguration für die Leistung jederzeit ändern, wenn Sie dies wünschen, und mindestens die gleiche Leistung wie bei jedem anderen Messagingsystem erzielen. Zumindest haben Sie diese Option. In den Foren und den ActiveMQ-FAQ finden Sie viele Informationen zur Konfiguration für Skalierung, Leistung und Hochverfügbarkeit. Außerdem unterstützt ActiveMQ AMQP 1.0, wenn die Spezifikation fertiggestellt ist, zusammen mit anderen Drahtformaten wie STOMP.

Ein weiteres Plus für ActiveMQ ist ein Apache-Projekt, daher gibt es eine Vielfalt in der Entwickler-Community - und es ist nicht an ein Unternehmen gebunden.


22

Ich habe weder ActiveMQ noch RabbitMQ verwendet, aber ZeroMQ. Der große Unterschied zwischen ZeroMQ und ActiveMQ usw. besteht darin, dass 0MQ ohne Makler ist und keine eingebaute Zuverlässigkeit für die Nachrichtenübermittlung aufweist. Wenn Sie nach einer benutzerfreundlichen Messaging-API suchen, die viele Messaging-Muster, Transporte, Plattformen und Sprachbindungen unterstützt, ist 0MQ auf jeden Fall einen Blick wert. Wenn Sie nach einer vollständigen Messaging-Plattform suchen, ist 0MQ möglicherweise nicht die richtige Wahl.

Unter www.zeromq.org/docs:cookbook finden Sie zahlreiche Beispiele für die Verwendung von 0MQ.

Ich verwende 0MQ erfolgreich für die Nachrichtenübermittlung in einer Anwendung zur Überwachung des Stromverbrauchs (siehe http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ ).


14

Ich benutze zeroMQ. Ich wollte ein einfaches Nachrichtenübermittlungssystem und brauche nicht die Komplikation eines Brokers. Ich möchte auch kein großes Java-orientiertes Unternehmenssystem.

Wenn Sie ein schnelles, einfaches System wünschen und mehrere Sprachen unterstützen müssen (ich verwende C und .net), würde ich empfehlen, sich 0MQ anzuschauen.


Verwenden Sie ZMQ auch in einer C / C ++ - Umgebung. Sehr schnell. Verwenden des Brokermusters. Passt gut zu unserer Echtzeit-VOIP-Watch-Dog-App, die Micro-PMTS für Farmen von Kamailio-SIP-Servern ausführt. Ich bin mir ziemlich sicher, dass ich mit ZMQ einen sehr hoch entwickelten Broker schreiben könnte, würde aber einige zusätzliche Produkte evaluieren, bevor ich mich dazu verpflichte.

10

Ich kann nur meine 2 Cent über ActiveMQ hinzufügen, aber da dies einer der beliebtesten ist:

Die Sprache, in der Sie schreiben möchten, ist möglicherweise wichtig. Obwohl ActiveMQ für die meisten einen Client hat, ist die C # -Implementierung im Vergleich zur Java-Bibliothek bei weitem nicht vollständig.

Dies bedeutet, dass einige grundlegende Funktionen unzuverlässig sind (Failover-Protokoll, das in einigen Fällen fehlschlägt, keine Unterstützung für die erneute Zustellung) und andere einfach nicht vorhanden sind. Da .NET für das Projekt nicht allzu wichtig zu sein scheint, ist die Entwicklung eher langsam und es scheint keinen Release-Plan zu geben. Der Kofferraum ist häufig defekt. Wenn Sie dies berücksichtigen, sollten Sie einen Beitrag zum Projekt leisten, wenn Sie möchten, dass die Dinge weitergehen.

Dann gibt es noch ActiveMQ selbst, das viele nette Funktionen hat, aber auch einige sehr seltsame Probleme. Wir verwenden die Fuse (Progress) -Version von activemq aus Stabilitätsgründen, aber selbst dann gibt es ein paar seltsame "Fehler", die Sie beachten sollten:

  • Broker, die gelegentlich keine Nachrichten mehr senden
  • Journalfehler in der Warteschlange zeigen Nachrichten an, die nicht mehr vorhanden sind (sie werden nicht an den Verbraucher übermittelt, aber dennoch).
  • Die Priorität ist immer noch nicht implementiert (steht seit Beginn der Menschheit auf der Liste der Probleme)
  • usw. usw.

Alles in allem ist es ein ziemlich schönes Produkt, wenn Sie mit seinen Problemen leben können:

A) haben keine Angst, sich bei der Verwendung von .NET aktiv zu engagieren
B) entwickeln sich in Java ;-)


5
Kleines Update: Seit einiger Zeit ist KahaDB der Standard-Persistenzspeicher für ActiveMQ. Allerdings: es ist überhaupt nicht stabil. Bei unseren Tests haben wir Datenbankbeschädigungen festgestellt (einige restaurierbar, andere kosten uns ungefähr 15.000.000 Nachrichten). ACHTUNG
Noctris

8

ZeroMQ ist wirklich mit null Warteschlangen! Es ist wirklich ein Fehler! Es hat keine Warteschlangen, Themen, Ausdauer, nichts! Es ist nur eine Middleware für die Sockets-API. Wenn es das ist, was du cool aussiehst! sonst vergiss es! es ist nicht wie activeMQ oder rabbitmq.


8

Einen Vergleich der Funktionen und der Leistung von RabbitMQ ActiveMQ und QPID finden Sie unter
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/.

Persönlich habe ich alle oben genannten drei ausprobiert. RabbitMQ ist meiner Meinung nach die beste Leistung, bietet jedoch keine Failover- und Wiederherstellungsoptionen. ActiveMQ bietet die meisten Funktionen, ist jedoch langsamer.

Update: HornetQ ist auch eine Option, die Sie prüfen können. Es handelt sich um JMS-Beschwerde, eine bessere Option als ActiveMQ, wenn Sie nach einer JMS-basierten Lösung suchen.


6

Ich habe hier über meine ersten Erfahrungen mit AMQP, Qpid und ZeroMQ geschrieben: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Meine subjektive Meinung ist, dass AMQP in Ordnung ist, wenn Sie die dauerhaften Messaging-Funktionen wirklich benötigen, und nicht zu besorgt ist, dass der Broker ein Engpass sein könnte. Außerdem fehlt derzeit der C ++ - Client für AMQP (Qpid hat meine Unterstützung nicht gewonnen; ich bin mir jedoch nicht sicher über den ActiveMQ-Client), aber möglicherweise in Arbeit. ZeroMQ kann anders sein.


6

Ich verwende ActiveMQ seit ungefähr 3 Jahren in einer Produktionsumgebung. Während es die Arbeit erledigt, kann es ein Problem sein, Versionen der Client-Bibliotheken in eine Reihe zu bringen, die ordnungsgemäß funktionieren und fehlerfrei sind. Wir wollten gerade auf RabbitMQ umsteigen.


5

In den Kommentaren dieses Blog-Beitrags wird diskutiert , wie Twitter eine eigene Nachrichtenwarteschlange schreibt, was interessant sein kann.

Steve hat umfangreiche Last- und Stresstests von ActiveMQ, RabbitMQ usw. durchgeführt. ActiveMQ ist eigentlich ziemlich langsam (viel langsamer als Kestrel). RabbitMQ stürzt ständig mit zu vielen Herstellern und zu wenigen Verbrauchern ab.

Sie werden wahrscheinlich anfangs jedoch keine Twitter-ähnliche Ladung haben :)


5

Nur wenige Anwendungen verfügen über so viele Optimierungskonfigurationen wie ActiveMQ. Einige Funktionen, die ActiveMQ auszeichnen, sind:

Konfigurierbare Prefetch-Größe. Konfigurierbares Threading. Konfigurierbares Failover. Konfigurierbare administrative Benachrichtigung an Hersteller. ... Details unter:

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


0

Abie, alles hängt von Ihrem Anwendungsfall ab. Anstatt sich auf das Konto eines anderen Benutzers für seinen Anwendungsfall zu verlassen, können Sie Ihren Anwendungsfall auf der Rabbitmq-Diskussionsliste veröffentlichen. Wenn Sie auf Twitter fragen, erhalten Sie auch einige Antworten. Beste Wünsche, Alex


0

Über ZeroMQ, auch bekannt als 0MQ, erhalten Sie, wie Sie vielleicht bereits wissen, die meisten Nachrichten pro Sekunde (sie waren ungefähr 4 Millionen pro Sekunde auf ihrem Ref-Server, als ich sie das letzte Mal überprüft habe), aber wie Sie vielleicht auch bereits wissen, die Dokumentation ist nicht vorhanden. Es wird Ihnen schwer fallen, herauszufinden, wie Sie die Server starten, geschweige denn, wie Sie sie verwenden. Ich denke, das ist teilweise der Grund, warum noch niemand zu 0MQ beigetragen hat.

Habe Spaß!


11
Es gibt Beispiele im Kochbuch zeromq.org/docs:cookbook und es gibt ein Handbuch api.zeromq.org/zmq.html .
Nick

7
Während zmq schnell ist und eine einfache API hat, beachten Sie Folgendes: keine Persistenz, keine Transaktionen. Keine Erkennung von fehlerhaften oder langsamen Verbrauchern (Nachrichten werden einfach ohne Benachrichtigung des Produzentenprogramms gelöscht). Nebenbemerkung: zmq ist serverlos, daher finden Sie keine Dokumente zum Starten der Server. Sie haben einen Proxyserver, wenn Sie so etwas brauchen.
Nr.

0

Wenn Sie auch an kommerziellen Implementierungen interessiert sind, sollten Sie sich Nirvana von my-channel ansehen .

Nirvana wird in der Finanzdienstleistungsbranche in großem Umfang für große Handels- und Preisverteilungsplattformen mit geringer Latenz eingesetzt.

Es gibt Unterstützung für eine Vielzahl von Client-Programmiersprachen in Unternehmens-, Web- und mobilen Domänen.

Die Clustering-Funktionen sind extrem fortschrittlich und einen Blick wert, wenn transparente HA oder Lastausgleich für Sie wichtig sind.

Nirvana kann kostenlos für Entwicklungszwecke heruntergeladen werden.


2
Dies sollte einen Haftungsausschluss enthalten, dass es sich um eine Beförderung eines Mitarbeiters von my-channel handelt.
Baron Schwartz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.