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.
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.
Antworten:
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:
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
Star
Turmfalke
RabbitMQ
Apache ActiveMQ
Bohnenstange
Amazon SQS
Kafka
ZMQ
EagleMQ
IronMQ
Ich hoffe, dass dies für uns hilfreich sein wird. Quelle
Mehr Informationen als Sie wissen möchten:
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
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.
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.
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.
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/ ).
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.
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:
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 ;-)
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.
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.
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.
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 :)
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:
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
Ü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ß!
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.