web-dev-qa-db-fra.com

Passer d'ActiveMQ à RabbitMQ

J'utilise actuellement ActiveMQ pour mes besoins de messagerie; à part quelques échecs de db, cela a bien fonctionné. Cependant, j'envisage à tout le moins d'essayer RabbitMQ. Mais avant de le faire, j'aimerais comprendre ce qui suit:

  1. En quoi RabbitMQ diffère-t-il d'ActiveMQ? Qu'est-ce que RabbitMQ fait de mieux ou de pire qu'ActiveMQ?
  2. Comparativement, comment RabbitMQ est-il facile/difficile à configurer?
  3. Dans quelle mesure RabbitMQ est-il bien intégré à Spring?
    • Avec ActiveMQ, je câble simplement un bean de fabrique de connexions dans un JmsTemplate et j'utilise DefaultMessageListener beans pour connecter les files d'attente à leurs gestionnaires respectifs. Puis-je essentiellement faire de même avec RabbitMQ?
50
sjac

AMQP est une norme au niveau de l'application pour le middleware orienté message (MOM). JMS est une API standard pour Java pour communiquer avec MOM.

Deux applications Java utilisant JMS pourraient utiliser différents MOM et donc ne pas être en mesure de communiquer. ActiveMQ est un système MOM avec une bibliothèque JMS qui permet des programmes Java Java pour y accéder en utilisant JMS, mais il ne peut pas nécessairement communiquer avec un autre JMS Java utilisant, par exemple, WebLogic MOM.

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

Malheureusement, tous les systèmes AMQP (et il y en a beaucoup) n'utilisent pas encore la version 1.0 d'AMQP. RabbitMQ (au moment d'écrire ces lignes) ne fournit pas encore de support AMQP 1.0. Certains des autres systèmes AMQP sont Apache QPID et StormMQ, mais il y en a beaucoup d'autres. Une fois que tous ces éléments prennent en charge AMQP 1.0, ils devraient tous être interopérables entre eux.

Sur leur site à http://activemq.Apache.org/amqp.html , ActiveMQ dit: "Nous nous attendons à ce qu'ActiveMQ implémente la dernière version, une fois qu'elle sera finalisée. Mais, pour le moment, ActiveMQ n'implémente pas AMQP. " Maintenant qu'AMQP 1.0 est sorti, il n'y a plus de mot d'ActiveMQ sur le moment où ils le prendront en charge.

8
JavaGP

Étant donné que RabbitMQ est un courtier AMQP où la configuration est largement gérée via AMQP lui-même, la plupart de vos questions n'ont aucun sens.

Un problème délicat avec RabbitMQ est que de nombreux packages de système d'exploitation sont à 1,72, ce qui est malheureusement obsolète. Vous feriez bien mieux d'obtenir un package .deb ou .rpm de RabbitMQ 2.51 directement depuis leur site. Après cela, la seule configuration que vous devez vraiment faire en dehors d'AMQP consiste à créer des vhosts et des autorisations utilisateur à l'aide de rabbitmqctl. Vous pouvez également télécharger les plugins .ez pour la console de gestion Web et les placer dans le bon répertoire avant de redémarrer RabbitMQ. Cette console de gestion Web est fortement recommandée si vous utilisez la version 2.51, mais impossible si vous êtes bloqué avec la valeur par défaut 1.72 avec laquelle Debian et Ubuntu vous proposent.

Une fois RabbitMQ en cours d'exécution, vous pouvez utiliser n'importe quelle langue et n'importe quelle bibliothèque AMQP. J'ai personnellement repris un système Python utilisant pika, amqplib et kombu. Maintenant j'utilise haigha et la bibliothèque Java Java de Scala, tous parlent à mutuellement sur AMQP (et le courtier MQ bien sûr).

6
Michael Dillon

La comparaison des concepts JMS/AMQP pour comparer ActiveMQ et RabbitMQ n'est pas la plus importante: ActiveMQ parle AMQP, et il existe un client JMS pour RabbitMQ dans l'édition commerciale (s'appelait vFabric RabbitMQ). Pourtant, certains concepts AMQP (clés de routage) peuvent être utiles dans certains cas d'utilisation.

J'ai utilisé les deux et j'aime les deux:

  • J'ai trouvé Erlang + RabbitMQ plus difficile à installer sur certains systèmes (référentiels de packages obsolètes) que Java + ActiveMQ
  • RabbitMQ a quelques options Nice clustering/HA (files d'attente en miroir, fédération de cluster). Il n'est pas nécessaire d'avoir un ZooKeeper partagé ou une base de données partagée, mais il faut s'occuper du problème du "split brain".
  • ActiveMQ est plus lourd (consommation de mémoire)
  • ActiveMQ est parfaitement intégré à 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 des applications Java, peut intégrer Camel.
  • Les tests automatisés Java avec ActiveMQ sont plus faciles (courtier intégré)
3
G Quintana