web-dev-qa-db-fra.com

ActiveMQ ou RabbitMQ ou ZeroMQ ou

Nous aimerions connaître vos expériences sur les avantages et les inconvénients d'ActiveMQ vs RabbitMQ vs ZeroMQ. Les informations sur les autres files de messages intéressantes sont également les bienvenues.

646
Abie

Edit: Ma réponse initiale était fortement axée sur AMQP. J'ai décidé de le réécrire pour offrir une vision plus large du 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 la charge ou la mise en file d'attente persistante des messages ne sont pris en charge que par quelques lignes de code. Toutefois, cela le rend également moins évolutif et "plus lent", car le nœud central ajoute de la latence et les enveloppes de message sont assez volumineuses.

ZeroMq est un système de messagerie très léger spécialement conçu pour les scénarios à haut débit et à faible temps de 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 en implémenter la plupart vous-même en combinant différents éléments de la structure (par exemple, des sockets et des périphériques). Zmq est très flexible, mais vous devrez étudier 80 pages environ du guide (que je recommande à toute personne qui écrit sur 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 centre. Comme Zmq, il peut être déployé avec les topologies de courtier et de 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 apis client pour les langages les plus courants (C++, Java, .Net, Python, Php, Ruby,…)
  • avoir une documentation solide
  • sont activement soutenus
342
Julien

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

Serveurs Message Queue

Les serveurs de files de messages sont disponibles dans différentes langues, Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling ou Sparrow), Scala (Kestrel, Kafka) ou Java (ActiveMQ). Un bref aperçu peut être trouvé ici

Sparrow

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

Starling

Faucon

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

RabbitMQ

  • RabbitMQ est un serveur Message Queue à 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 à LinkedIn en Scala
  • Utilisé par LinkedIn pour décharger le traitement de toutes les vues de page et autres
  • Utilise par défaut la persistance, utilise le cache de disque du système d'exploitation pour les données chaudes (le débit est plus élevé que pour l'un des précédents si la persistance est activée)
  • Prise en charge à la fois en ligne et hors ligne

ZMQ

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

EagleMQ

  • EagleMQ est un gestionnaire de files d'attente open source, performant 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. Les supports fonctionnent 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. source

174

Plus d'informations que vous voudriez savoir:

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


METTRE À JOUR

J'explique juste ce que Paul a ajouté dans un commentaire. Le page mentionnée ci-dessus est mort après 2010, lisez-le avec une pincée de sel. Beaucoup de choses ont été changées en 3 ans.

History of Wiki Page

83
FlySwat

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

La comparaison de 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 véritables files d'attente persistantes, 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 de processus. 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.

Alors:

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

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

71
sanosdole

Il existe une comparaison entre RabbitMQ et ActiveMQ ici . ActiveMQ est immédiatement configuré pour garantir la livraison des messages, ce qui peut donner l’impression qu’il est lent par rapport à des systèmes de messagerie moins fiables. Si vous le souhaitez, vous pouvez toujours modifier la configuration pour améliorer les performances et obtenir des performances au moins égales à celles de tout autre système de messagerie. Au moins vous avez cette option. Il existe de nombreuses informations sur les forums et sur ActiveMQ FAQ pour la configuration de la mise à l'échelle, des performances et de la haute disponibilité. En outre, ActiveMQ prendra en charge AMQP 1.0 lorsque la spécification sera finalisée, ainsi que d’autres formats filaires, tels que STOMP.

Un autre avantage pour ActiveMQ est qu’il s’agit d’un projet Apache. La communauté des développeurs est donc diversifiée et n’est pas liée à une seule entreprise.

34
Rob Davies

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 intermédiaire 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 de langage, alors 0MQ vaut vraiment le coup d'œil. Si vous recherchez une plate-forme de messagerie complète, 0MQ peut ne pas correspondre à la facture.

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

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

22
Bob Scott

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 souhaite pas non plus 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 conseillerais donc de regarder 0MQ.

14
Nick

Je ne peux ajouter que mes 2 centimes à propos d'ActiveMQ, mais puisque c'est l'un des plus populaires:

La langue que vous voulez écrire peut être importante. Bien qu'ActiveMQ ait la plupart du temps un client, son implémentation en C # est loin d'être complète par rapport à la bibliothèque Java.

Cela signifie que certaines fonctionnalités de base sont irrégulières (protocole de basculement qui… bien… échoue dans certains cas, pas de prise en charge de la redistribution) et d'autres tout simplement pas. É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 publication. Le coffre est souvent endommagé. Par conséquent, si vous envisagez de le faire, vous pouvez envisager de contribuer au projet si vous souhaitez que les choses se passent mieux.

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

  • Les courtiers qui arrêtent d'envoyer des messages dans 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 ils le sont tout de même)
  • La priorité n'est toujours pas appliquée (figure dans la liste des problèmes depuis le début du genre humain)
  • etc.

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

A) ne craignez pas de vous impliquer activement lorsque vous utilisez .NET
B) se développer en Java ;-)

10
Noctris

Il existe une comparaison des caractéristiques et performances de RabbitMQ ActiveMQ et QPID donnée à
http://bhavin.directi.com/rabbitmq-vs-Apache-activemq-vs-Apache-qpid/

Personnellement, j'ai essayé tous les trois ci-dessus. RabbitMQ est selon moi le meilleur en termes de performances, mais il n’a pas d’option 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 sur laquelle vous pouvez vous pencher, il s'agit de JMS Complaint, meilleure option qu'ActiveMQ si vous recherchez une solution basée sur JMS.

8
sheki

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! Ce n'est qu'un middleware pour l'API Sockets. Si c'est ce que vous cherchez cool! sinon oublie ça! ce n'est pas comme activeMQ ou rabbitmq.

8
Angek

J'ai utilisé ActiveMQ dans un environnement de production depuis environ 3 ans maintenant. Bien que le travail soit terminé, il peut être problématique d’aligner des versions des bibliothèques clientes qui fonctionnent correctement et qui ne contiennent pas de bogues. Cherchaient actuellement à passer à RabbitMQ.

6
Kelly

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 AMQP va bien si vous avez vraiment besoin des installations de messagerie persistantes et ne craignez pas trop que le courtier soit un goulot d'étranglement. De plus, le client C++ est actuellement manquant pour AMQP (Qpid n'a pas gagné mon soutien; je ne suis pas sûr du client ActiveMQ cependant), mais peut-être que le travail est en cours. ZeroMQ peut être le moyen autrement.

6
ron

Il y a une discussion dans les commentaires de cet article de blog , à propos de Twitter écrivant leur propre file de messages, ce qui peut être intéressant.

Steve a fait des tests de charge et de contrainte approfondis sur ActiveMQ, RabbitMQ, etc. ActiveMQ est en fait assez lent (beaucoup plus lent que Kestrel), RabbitMQ se heurte systématiquement à trop de producteurs et à trop peu de consommateurs.

Vous n'aurez probablement pas de charge semblable à Twitter au départ, cependant :)

5
crb

Peu d'applications ont autant de configurations de réglage qu'ActiveMQ. ActiveMQ se démarque notamment par les fonctionnalités suivantes:

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

http://activemq.net/bloghttp://activemq.Apache.org

5
cobrien

Si vous êtes également intéressé par les implémentations commerciales, vous devriez jeter un oeil sur Nirvana de my-channels .

Le nirvana est largement utilisé dans le secteur des services financiers pour les plateformes de distribution et de distribution de prix à grande latence et à faible temps de latence.

Il prend en charge un large éventail de langages de programmation client dans les domaines de l'entreprise, du Web et des mobiles.

Les fonctionnalités de mise en cluster sont extrêmement avancées et méritent d'être examinées si une haute disponibilité transparente ou un équilibrage de charge est important pour vous.

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

0
eddie mcdaid

Abie, tout se résume à votre cas d'utilisation. Plutôt que de vous fier au compte rendu par quelqu'un d'autre de son cas d'utilisation, n'hésitez pas à poster votre cas d'utilisation sur la liste de rabbitmq-discussion. Demander sur Twitter vous apportera aussi des réponses. Meilleurs voeux, alexis

0

Comme vous le savez peut-être déjà, ZeroMQ est celui qui vous enverra le plus de messages par seconde (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à, 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é à environ 0MQ.

S'amuser!

0
Charle