ActiveMQ ou RabbitMQ ou ZeroMQ ou [fermé]


645

Nous serions intéressés d'entendre toute expérience avec les avantages et les inconvénients d'ActiveMQ vs RabbitMQ vs ZeroMQ. Des informations sur toute autre file d'attente de messages intéressante sont également les bienvenues.


2
Je suis nouveau dans la file d'attente de messages et j'en lisais plus sur son cas d'utilisation réel sur stackoverflow.com/q/1035949/181870 . Plus tard, en recherchant des sujets / articles sur la file d'attente de messages (JMS en particulier), je suis tombé sur OpenJMS - une implémentation open source de la spécification Java Message Service API 1.1 de Sun Microsystems. Ce qui me surprend, c'est que ce n'est pas couvert / discuté ici? Je voulais juste vérifier avec la communauté si OpenJMS est lié à ce sujet / discussion et si oui, selon OP, toute expérience avec des avantages et des inconvénients de la même chose aiderait.
Gnanam

3
3 ans plus tard, une note pour les personnes qui naviguent ici ... pensez à POURQUOI vous voulez utiliser le middleware de mise en file d'attente des messages. Si la raison est de répartir les tâches au sein d'un cluster, regardez Celery. Il fonctionne à un niveau d'abstraction plus élevé que les solutions de style MQ, utilise RabbitMQ pour déplacer des messages, mais prend en charge de manière exceptionnelle la sémantique spécifique aux tâches.
Chris Johnson

Réponses:


342

Edit: Ma réponse initiale était fortement axée sur l'AMQP. J'ai décidé de le réécrire pour offrir une vue plus large sur le sujet.

Ces 3 technologies de messagerie ont des approches différentes sur la construction de systèmes distribués:

RabbitMQ est l'une des principales implémentations du protocole AMQP (avec Apache Qpid). Par conséquent, il implémente une architecture de courtier, ce qui signifie que les messages sont mis en file d'attente sur un nœud central avant d'être envoyés aux clients. Cette approche rend RabbitMQ très facile à utiliser et à déployer, car des scénarios avancés tels que le routage, l'équilibrage de charge ou la mise en file d'attente de messages persistante sont pris en charge en quelques lignes de code. Cependant, cela le rend également moins évolutif et «plus lent» car le nœud central ajoute de la latence et les enveloppes de messages sont assez grandes.

ZeroMq est un système de messagerie très léger spécialement conçu pour les scénarios à haut débit / faible latence comme celui que vous pouvez trouver dans le monde financier. Zmq prend en charge de nombreux scénarios de messagerie avancés, mais contrairement à RabbitMQ, vous devrez implémenter la plupart d'entre eux vous-même en combinant divers éléments du cadre (par exemple: sockets et périphériques). Zmq est très flexible mais vous devrez étudier les 80 pages environ du guide (que je recommande de lire pour quiconque écrit un système distribué, même si vous n'utilisez pas Zmq) avant de pouvoir faire quelque chose de plus compliqué que d'envoyer des messages entre 2 pairs.

ActiveMQ est au milieu. Comme Zmq, il peut être déployé avec les topologies de courtier et P2P. Comme RabbitMQ, il est plus facile de mettre en œuvre des scénarios avancés, mais généralement au détriment des performances brutes. C'est le couteau suisse de la messagerie :-).

Enfin, les 3 produits:

  • avoir des API clients pour les langages les plus courants (C ++, Java, .Net, Python, Php, Ruby,…)
  • avoir une documentation solide
  • sont activement soutenus

22
Bien que cela soit vrai, je ne sais pas si l'adoption de l'AMQP a une forte corrélation avec la question d'origine. Je pense qu'il y a des considérations plus importantes pour le choix d'une file d'attente de messages que le protocole filaire sous-jacent qu'il utilise.
StaxMan

8
La question ne mentionne pas la nécessité d'AMQP, mais cette réponse se concentre sur AMQP. Si nous supposions JMS comme une exigence, la réponse serait essentiellement l'inverse: ActiveMQ est le plus populaire, RabbitMQ a un support qui devrait probablement fonctionner. Si aucun protocole de câblage n'est supposé: voir les autres réponses.
Fletch

19
Ayant travaillé dans RabbitMQ et ActiveMQ, je vous recommande de rester loin d'ActiveMQ. Les versions sont très boguées, et je n'ai eu aucun problème avec les machines qui tombent en panne et les fuites de mémoire etc ... RabbitMQ d'autre part fonctionne juste. Après l'avoir branché, je n'ai JAMAIS dû le revoir. Il fait juste ce dont il a besoin. Si vous aimez, j'ai un simple tutoriel RabbitMQ sur mon blog jarloo.com/rabbitmq-c-tutorial
Kelly

2
Après avoir examiné les offres d'emploi pour RabbitMQ par rapport à ActiveMQ, RabbitMQ semble être beaucoup plus en demande. ActiveMQ existe depuis plus longtemps, mais il est presque autant demandé par les employeurs.

1
Le guide pour ZMQ est aussi vraiment une lecture drôle et bonne :)
meawoppl

174

Pourquoi avez-vous manqué Sparrow , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ ?

Serveurs Message Queue

Les serveurs de file d'attente de messages sont disponibles en plusieurs langues, Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling ou Sparrow), Scala (Kestrel, Kafka) ou Java (ActiveMQ). Un bref aperçu peut être trouvé ici

Moineau

  • écrit par Alex MacCaw
  • Sparrow est une file d'attente légère écrite en Ruby qui "parle de memcache"

Étourneau

Crécerelle

  • écrit par Robey Pointer
  • Clone Starling écrit en Scala (un port de Starling de Ruby à Scala)
  • Les files d'attente sont stockées en mémoire, mais enregistrées sur le disque

RabbitMQ

  • RabbitMQ est un serveur de file d'attente de messages à Erlang
  • stocke les travaux en mémoire (file d'attente de messages)

Apache ActiveMQ

  • ActiveMQ est un courtier de messages open source en Java

Beanstalkd

Amazon SQS

Kafka

  • Écrit sur LinkedIn à Scala
  • Utilisé par LinkedIn pour décharger le traitement de toutes les pages et autres vues
  • Utilise par défaut la persistance, utilise le cache de disque du système d'exploitation pour les données chaudes (a un débit plus élevé que n'importe lequel des éléments ci-dessus ayant la persistance activée)
  • Prend en charge le traitement en ligne et hors ligne

ZMQ

  • La bibliothèque de sockets qui agit comme un framework de concurrence
  • Plus rapide que TCP, pour les produits en cluster et le supercalcul
  • Transporte les messages via inproc, IPC, TCP et multicast
  • Connectez N-to-N via fanout, pubsub, pipeline, request-reply
  • E / S asynchrone pour les applications de transmission de messages multicœurs évolutives

EagleMQ

  • EagleMQ est un gestionnaire de files d'attente open source, hautes performances et léger.
  • Écrit en C
  • Stocke toutes les données en mémoire et prend en charge la persistance.
  • Il a son propre protocole. Prend en charge le travail avec les files d'attente, les itinéraires et les canaux.

IronMQ

  • IronMQ
  • Écrit en Go
  • Service de file d'attente entièrement géré
  • Disponible à la fois en version cloud et sur site

J'espère que cela nous sera utile. la source


Avez-vous une idée / pensé à ajouter / commenter ma question posée dans la zone de commentaire de cette question ici - stackoverflow.com/questions/731233/… ?
Gnanam

Ont-ils une gestion des conflits? J'ai toujours trouvé ce problème avec les systèmes de file d'attente. Par exemple, bloquer un producteur si la file d'attente est pleine en fonction du nombre d'éléments (pas des ressources mémoire).
sw.

1
queues.io - Pensez à ajouter des détails manquants par rapport à ici.
asyncwait

83

Plus d'informations que vous ne voudriez en savoir:

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


MISE À JOUR

J'élabore simplement ce que Paul a ajouté en commentaire. La page mentionnée ci-dessus est morte après 2010, alors lisez avec une pincée de sel. Beaucoup de choses ont été changées en 3 ans.

Histoire de la page Wiki


7
Je pense que ces gars pensent mal aux files d'attente - les files d'attente ne devraient pas être 1 (ou plus) par utilisateur. Ils devraient mettre leur travail dans quelques files d'attente, puis utiliser. boîtes de réception (ou mbox) pour chaque utilisateur.
Michael Deardeuff

1
Michael - voulez-vous en dire un peu plus? Le problème est la livraison en temps réel dans un système basé sur le chat de groupe. Si je comprends bien, vous parlez d'un mécanisme de stockage durable pour les messages en tant que point de terminaison (boîte de réception)? Si c'est le cas, cela ne correspond pas à la facture, ils veulent que le chat soit livré immédiatement et que les clients soient des abonnés directs? Autant que je sache, avoir une tonne de files d'attente basées sur des sujets n'est pas un cas d'utilisation optimisé?
Josh

1
Mise à jour: Cette page wiki SecondLife a été écrite en 2009. À ce jour, en 2013, bon nombre des points spécifiques mentionnés au sujet des différentes files d'attente de messages qu'ils ont examinées ne sont plus d'actualité, en raison des améliorations continues de tous les MQ. La plupart ou la totalité des MQ qu'ils ont testés sont meilleurs, dans un certain sens, maintenant.
Paul Legato

71

Cela dépend vraiment de votre cas d'utilisation.

Comparer 0MQ avec ActiveMQ ou RabbitMQ n'est pas juste. ActiveMQ et RabbitMQ sont des systèmes de messagerie qui nécessitent une installation et une administration. Ils offrent beaucoup plus de fonctionnalités que ZeroMQ. Ils ont de vraies files d'attente persistantes, un support pour les transactions, etc.

ZeroMQ est une implémentation de socket légère orientée message. Il convient également à la programmation asynchrone en cours. Il est possible d'exécuter un "système de messagerie d'entreprise" sur ZeroMQ, mais vous devrez en implémenter beaucoup vous-même.

Donc:

ActiveMQ, RabbitMQ, Websphere MQ & MSMQ sont des "files de messages d'entreprise"

ZeroMQ est une bibliothèque IPC orientée message.


7
Vous pouvez en utiliser plusieurs. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge explique comment vous pouvez utiliser 0MQ pour faire le pont entre plusieurs courtiers RabbitMQ et créer une fédération faiblement couplée.
Michael Dillon

34

Il y a une comparaison entre RabbitMQ et ActiveMQ ici . Prêt à l'emploi, ActiveMQ est configuré pour garantir la livraison des messages - ce qui peut donner l'impression d'être lent par rapport aux systèmes de messagerie moins fiables. Vous pouvez toujours modifier la configuration des performances si vous le souhaitez et obtenir au moins des performances aussi bonnes que tout autre système de messagerie. Au moins, vous avez cette option. Il y a beaucoup d'informations sur les forums et la FAQ ActiveMQ pour la configuration pour la mise à l'échelle, les performances et la haute disponibilité. De plus, ActiveMQ prendra en charge AMQP 1.0 lorsque la spécification sera finalisée, ainsi que d'autres formats de fil, comme STOMP.

Un autre avantage pour ActiveMQ est son projet Apache, donc il y a de la diversité dans la communauté des développeurs - et ce n'est pas lié à une seule entreprise.


22

Je n'ai pas utilisé ActiveMQ ou RabbitMQ mais j'ai utilisé ZeroMQ. La grande différence que je vois entre ZeroMQ et ActiveMQ etc. est que 0MQ est sans courtier et n'a pas de fiabilité intégrée pour la livraison des messages. Si vous recherchez une API de messagerie facile à utiliser prenant en charge de nombreux modèles de messagerie, transports, plates-formes et liaisons linguistiques, alors 0MQ vaut vraiment le coup d'œil. Si vous recherchez une plate-forme de messagerie complète, 0MQ peut ne pas convenir.

Voir www.zeromq.org/docs:cookbook pour de nombreux exemples d'utilisation de 0MQ.

J'utilise avec succès 0MQ pour le passage de messages dans une application de surveillance de la consommation d'électricité (voir http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ )


14

J'utilise zeroMQ. Je voulais un système de transmission de messages simple et je n'ai pas besoin de la complication d'un courtier. Je ne veux pas non plus d'un énorme système d'entreprise orienté Java.

Si vous voulez un système simple et rapide et que vous devez prendre en charge plusieurs langues (j'utilise C et .net), je vous recommande de regarder 0MQ.


Utilisation également de ZMQ dans un environnement C / C ++. Très vite. Utilisation du modèle de courtier. Un bon ajustement pour notre application de surveillance VOIP en temps réel faisant des micro-pmts pour les fermes de serveurs SIP kamailio. Je suis presque sûr que je pourrais écrire un courtier très sophistiqué en utilisant ZMQ, mais évaluerais quelques produits supplémentaires avant de m'engager.

10

Je peux seulement ajouter mes 2 cents sur ActiveMQ mais comme c'est l'un des plus populaires:

La langue dans laquelle vous souhaitez écrire peut être importante. Bien qu'ActiveMQ ait un client pour la plupart, leur implémentation C # est loin d'être complète par rapport à la bibliothèque Java.

Cela signifie que certaines fonctionnalités de base sont instables (protocole de basculement qui ... eh bien ... échoue dans certains cas, pas de support de redistribution) et d'autres tout simplement pas là. Étant donné que .NET ne semble pas être si important pour le projet, le développement est plutôt lent et il ne semble pas y avoir de plan de version. Le tronc est souvent cassé, donc si vous y réfléchissez, vous voudrez peut-être envisager de contribuer au projet si vous voulez que les choses avancent.

Ensuite, il y a ActiveMQ lui-même qui a beaucoup de fonctionnalités intéressantes mais aussi des problèmes très étranges. Nous utilisons la version Fuse (Progress) d'activemq pour des raisons de stabilité, mais même dans ce cas, vous devez garder à l'esprit quelques "bugs" étranges:

  • Les courtiers qui cessent d'envoyer des messages à certaines occasions
  • Erreurs de journal faisant que la file d'attente affiche des messages qui ne sont plus là (ils ne sont pas remis au consommateur mais quand même)
  • La priorité n'est toujours pas mise en œuvre (figure sur la liste des problèmes depuis le début de l'espèce humaine)
  • etc.

Dans l'ensemble, c'est un très joli produit SI vous pouvez vivre avec ses problèmes:

A) n'ont pas peur de s'impliquer activement lors de l'utilisation de .NET
B) de développer en java ;-)


5
Mise à jour mineure: depuis un certain temps, KahaDB est le magasin de persistance par défaut pour ActiveMQ. Cependant: il n'est pas du tout stable. Dans nos tests, nous avons vu de corruptions base de données (certains restituable, d' autres nous coûte environ 15.000.000 messages) Il faut se méfier
Noctris

8

ZeroMQ est vraiment avec zéro files d'attente! C'est vraiment une erreur! Il n'a pas de files d'attente, de sujets, de persistance, rien! Il ne s'agit que d'un middleware pour l'API sockets. Si c'est ce que vous cherchez cool! sinon oubliez ça! ce n'est pas comme activeMQ ou rabbitmq.


8

Il y a une comparaison des fonctionnalités et des performances de RabbitMQ ActiveMQ et QPID données à
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

Personnellement, j'ai essayé les trois ci-dessus. RabbitMQ est le meilleur en termes de performances selon moi, mais il n'a pas d'options de basculement et de récupération. ActiveMQ a le plus de fonctionnalités, mais est plus lent.

Mise à jour: HornetQ est également une option que vous pouvez examiner, c'est JMS Complaint, une meilleure option qu'ActiveMQ si vous recherchez une solution basée sur JMS.


6

J'ai écrit sur mon expérience initiale concernant AMQP, Qpid et ZeroMQ ici: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Mon opinion subjective est que l'AMQP est bien si vous avez vraiment besoin des installations de messagerie persistante et n'est pas trop préoccupé par le fait que le courtier puisse être un goulot d'étranglement. En outre, le client C ++ est actuellement manquant pour AMQP (Qpid n'a pas gagné mon support; je ne suis pas sûr du client ActiveMQ cependant), mais peut-être un travail en cours. ZeroMQ peut être le contraire.


6

J'utilise ActiveMQ dans un environnement de production depuis environ 3 ans maintenant. Pendant que le travail est fait, l'alignement des versions des bibliothèques clientes qui fonctionnent correctement et sont exemptes de bogues peut être un problème. Étaient actuellement à la recherche d'une transition vers RabbitMQ.


5

Il y a une discussion dans les commentaires de ce blog , sur Twitter écrivant leur propre file d'attente de messages, ce qui peut être intéressant.

Steve a effectué des tests de charge et de stress approfondis sur ActiveMQ, RabbitMQ, etc.

Cependant, vous n'aurez probablement pas de charge semblable à Twitter au début :)


5

Peu d'applications ont autant de configurations de réglage qu'ActiveMQ. Certaines fonctionnalités qui distinguent ActiveMQ sont:

Taille Prefetch configurable. Filetage configurable. Basculement configurable. Notification administrative configurable aux producteurs. ... détails sur:

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


0

Abie, tout se résume à votre cas d'utilisation. Plutôt que de compter sur le compte de quelqu'un d'autre de son cas d'utilisation, n'hésitez pas à publier votre cas d'utilisation sur la liste rabbitmq-discuter. En demandant sur Twitter, vous obtiendrez également des réponses. Meilleurs voeux, alexis


0

À propos de ZeroMQ aka 0MQ, comme vous le savez peut-être déjà, c'est celui qui vous donnera le plus de messages par seconde (ils étaient environ 4 millions par seconde sur leur serveur de référence la dernière fois que j'ai vérifié), mais comme vous le savez peut-être déjà, le la documentation est inexistante. Vous aurez du mal à trouver comment démarrer le (s) serveur (s), et encore moins comment les utiliser. Je suppose que c'est en partie pourquoi personne n'a encore contribué à 0MQ.

S'amuser!


11
Il y a des exemples dans le livre de recettes zeromq.org/docs:cookbook et il y a un manuel api.zeromq.org/zmq.html .
Nick

7
Bien que zmq soit rapide et ait une API simple, gardez à l'esprit ceci: pas de persistance, pas de transactions. Aucune détection de consommateurs falsifiés ou lents (les messages sont simplement supprimés sans aucune notification au programme producteur). Sidenote: zmq est sans serveur, vous ne trouverez donc pas de documentation pour démarrer les serveurs. Ils ont un serveur proxy si vous avez besoin de quelque chose comme ça.
nos

0

Si vous êtes également intéressé par les implémentations commerciales, vous devriez jeter un œil à Nirvana depuis my-channel .

Nirvana est largement utilisé dans l'industrie des services financiers pour les plateformes de trading et de distribution de prix à faible latence à grande échelle.

Il existe une prise en charge d'un large éventail de langages de programmation client dans les domaines d'entreprise, Web et mobile.

Les capacités de clustering sont extrêmement avancées et valent le détour si une HA transparente ou un équilibrage de charge est important pour vous.

Nirvana est téléchargeable gratuitement à des fins de développement.


2
Cela aurait dû avoir un avertissement que c'est une promotion d'un employé de mes canaux.
Baron Schwartz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.