53 votes

Commutation de ActiveMQ à RabbitMQ

Je suis actuellement à l'aide ActiveMQ pour mes besoins en matière de messagerie; à l'exception de quelques db échecs, il a bien fonctionné. Cependant, je suis au moins compte tenu essayer RabbitMQ. Mais avant de poursuivre, j'aimerais comprendre ce qui suit:

  1. En quoi RabbitMQ diffèrent de ActiveMQ? Ce n'RabbitMQ faire mieux ou pire que ActiveMQ?
  2. Relativement, facile/difficile, c'est de RabbitMQ pour configurer?
  3. Comment bien intégré est RabbitMQ avec le Printemps?
    • Avec ActiveMQ, j'ai simplement un fil de connexion de l'usine bean en JmsTemplate et j'utilise DefaultMessageListener haricots files d'attente pour se connecter à leurs gestionnaires. Puis-je font essentiellement la même chose avec RabbitMQ?

71voto

David Dossot Points 20153
  1. RabbitMQ est un courtier AMQP, tandis que ActiveMQ est JMS un. Je vous suggère de lire le AMQP article de wikipédia pour avoir une idée des concepts utilisés dans AMQP, qui sont différents de ceux que vous connaissez dans la JMS. L'une des principale différence est que, dans AMQP un producteur envoie à un échange sans connaître le message réel, stratégie de distribution, tout en JMS le producteur cibles, soit une file d'attente ou un sujet (donc informés du type de message de routage en place). Il est donc difficile de dire ce qui se fait de mieux ou de pire, que la sémantique est très différente entre JMS et AMQP.

  2. RabbitMQ est les files d'attente et les échanges sont tous configurés via le protocole AMQP donc un client de la bibliothèque vous permet de configurer tous vos destinations et de leur comportement. ActiveMQ nécessite de destination spécifique de configuration parce que la JMS spec ne couvre pas toute la partie administration de choses. En outre, RabbitMQ de la configuration du système est d'Erlang-esque, bien que ActiveMQ est généralement configuré en XML. De sorte que vous aurez à faire à l' {n-uplet} et <> belle syntaxe. RabbitMQ est généralement installé avec les packages de système d'exploitation, tout en ActiveMQ distributions sont des archives vous déposer n'importe où (ou Maven deps vous intégrer dans quelque chose d'autre).

  3. Très bien : -) Voir le Printemps AMQP.

8voto

JavaGP Points 31

AMQP est une application de niveau standard de Message Oriented Middleware (MOM). JMS est une API standard de Java pour communiquer avec MAMAN.

Deux applications Java à l'aide de JMS pourrait être à l'aide de différents MAMAN et donc encore être incapable de communiquer. ActiveMQ est une MAMAN avec un système de JMS bibliothèque qui permet à des programmes Java pour accéder à l'aide de JMS, mais on ne peut pas communiquer avec un autre JMS programme Java à l'aide de, disons, WebLogic MAMAN.

Différents AMQP MAMAN systèmes peuvent interagir les uns avec les autres (en supposant qu'ils utilisent la même version de AMQP) depuis AMQP est un standard dans le même sens que, dire SMTP. Il n'y a pas de raison qu'un AMQP MAMAN système n'a pas pu fournir également un JMS bibliothèque pour ses clients Java. SwiftMQ, par exemple, fournit un JMS API et utilise AMQP 1.0.

Malheureusement, tous les AMQP systèmes (et ils sont nombreux) sont à l'aide de la version 1.0 de AMQP encore. RabbitMQ (au moment d'écrire ces lignes) ne fournit pas encore de AMQP 1.0 soutien. Certains des autres AMQP systèmes Apache QPID et StormMQ, mais il y a beaucoup d'autres. Une fois tous ces éléments sont en soutenant AMQP 1.0, alors ils devraient tous être inter-opérable avec les autres.

Sur leur site à l' http://activemq.apache.org/amqp.html, ActiveMQ dit, "nous Nous attendons à ce ActiveMQ pour mettre en œuvre la dernière version, une fois celui-ci finalisé. Mais, à ce moment, ActiveMQ ne pas mettre en œuvre AMQP." Maintenant que AMQP 1.0 est sorti, il n'y a pas de mot de plus de ActiveMQ sur quand ils vont le soutenir.

6voto

Michael Dillon Points 18741

Depuis RabbitMQ est un courtier AMQP, où la configuration est en grande partie gérée par le biais d'AMQP lui-même, la plupart de vos questions n'ont aucun sens.

Un délicat problème avec RabbitMQ est que de nombreux OS packages sont à 1,72 qui est malheureusement hors de date. Vous feriez beaucoup mieux pour obtenir un .deb ou .package rpm de RabbitMQ 2.51 directement à partir de leur site. Après que la seule config que vous devez vraiment faire à l'extérieur de AMQP, est de créer des serveurs virtuels et les autorisations de l'utilisateur à l'aide de rabbitmqctl. Ou, vous pouvez télécharger la .ez plug-ins pour le web de gestion de la console et de les placer dans le bon répertoire avant de redémarrer RabbitMQ. Ce web de la console de gestion est fortement recommandé si vous utilisez 2.51 mais impossible si vous êtes coincé avec le défaut 1,72 que Debian et Ubuntu selle vous avec.

Une fois que vous avez RabbitMQ en cours d'exécution, vous pouvez utiliser n'importe quelle langue et tout AMQP de la bibliothèque. J'ai personnellement pris le contrôle d'un système à l'aide de Python pika, amqplib et le kombu. Maintenant, je suis en utilisant haigha et la bibliothèque Java Scala, tous à parler les uns aux autres sur AMQP (et la MQ courtier de cours).

3voto

G Quintana Points 135

En comparant JMS/AMQP concepts de comparer ActiveMQ et RabbitMQ est pas le plus important: ActiveMQ parle AMQP, et il n'y a JMS client pour RabbitMQ dans l'édition commerciale (a été appelé vFabric RabbitMQ). Pourtant, certains AMQP (concepts de routage clés) peut être utile dans certains cas d'utilisation.

J'ai utilisé les deux et comme les deux:

  • Trouvé Erlang+RabbitMQ plus difficile à installer sur certains systèmes (obsolète des référentiels de paquets) que Java+ActiveMQ
  • RabbitMQ a quelques belles clustering/HA options (mise en miroir des files d'attente, cluster de la fédération). Il n'est pas nécessaire pour l'utilisation d'un ZooKeeper ou une base de données partagée, mais il faut prendre soin de le "split-brain" problème.
  • ActiveMQ est plus lourd (consommation de mémoire)
  • ActiveMQ est parfaitement intégré avec Apache Camel, avec RabbitMQ vous feriez mieux d'utiliser Spring Integration (Camel RabbitMQ/AMQP est un peu rude)
  • ActiveMQ prend en charge les transactions XA, peut être intégré dans les applications Java, pouvez intégré à dos de Chameau.
  • Java de tests automatisés avec ActiveMQ est plus facile (embedded courtier)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X