105 votes

Quand utiliser Akka (Acteurs Scala) au lieu de solutions de messagerie "anciennes" telles que WebSphere MQ ou Tibco Rendevous ?

J'ai déjà lu la discussion sur les acteurs Scala et JMS : Acteurs Scala et JMS

Je vais jouer avec Akka dans les prochaines semaines pour mieux comprendre sa puissance et les bons cas d'utilisation. Il a l'air vraiment bien, et il a beaucoup d'addons en plus des acteurs de base, par exemple l'intégration Apache Camel (j'aime vraiment Camel).

En général, nous utilisons des solutions de messagerie qui existent depuis des années déjà : soit une implémentation JMS telle que WebSphere MQ ou ActiveMQ est utilisée pour la communication point à point, soit Tibco Rendevous pour la messagerie multidestinataire. Ils sont très stables et offrent une disponibilité et des performances élevées. Néanmoins, la configuration et l'installation sont beaucoup plus complexes que l'utilisation d'Akka, je pense !

Je me demande pourquoi je devrais utiliser Akka dans certains de ces cas d'utilisation ?

Je sais, il est léger et facile à utiliser (si vous connaissez Scala en plus de Java, bien sûr). Mais pouvez-vous me donner d'autres raisons pour lesquelles je devrais penser à utiliser Akka plutôt que WebSphere MQ ou Tibco RV dans mon prochain projet ?

Et quand ne dois-je toujours pas utiliser Akka ? Offre-t-il la même haute disponibilité et les mêmes performances que les autres solutions ? Ou est-ce une mauvaise idée de comparer Akka avec les autres solutions de messagerie ?

Peut-être existe-t-il une autre solution de messagerie dans l'environnement JVM que je devrais envisager en plus de JMS (Point-to-Point), TibcoRV (Multicast) et Akka ?

J'espère que vous pourrez me donner quelques informations, j'aimerais vraiment utiliser Akka dans un de mes prochains projets...

Merci.

90voto

Adam Gent Points 15055

Tout d'abord, les "anciens" systèmes de messagerie (MQ) sont plus anciens dans leur mise en œuvre mais plus récents dans leur conception : files d'attente persistantes transactionnelles . Scala Actors et Akka sont peut-être une implémentation plus récente mais sont construits sur un modèle de concurrence plus ancien de Actors.

Les deux modèles sont cependant très similaires dans la pratique car ils sont tous deux basés sur des messages d'événements : Voir ma réponse pour RabbitMQ et Akka .

Si vous voulez coder uniquement pour la JVM, alors akka est probablement un bon choix. Sinon, j'utiliserais rabbitmq .

De plus, si vous utilisez Scala, alors akka est une évidence. Cependant, les liaisons Java d'Akka ne sont pas très Java et nécessitent un casting en raison du système de types de Scala.

De plus, en Java, les gens ne créent généralement pas d'objets immuables, ce que je vous recommande de faire pour la messagerie. Par conséquent, il est très facile en Java de faire accidentellement quelque chose en utilisant Akka qui ne sera pas mis à l'échelle (en utilisant des objets mutables pour les messages, en s'appuyant sur un état de rappel de fermeture bizarre). Avec MQ, ce n'est pas un problème car les messages sont toujours sérialisés au détriment de la vitesse. Avec Akka, ils ne le sont généralement pas.

Akka est également plus performant avec de nombreuses files d'attente que la plupart des MQ. En effet, pour la plupart des clients MQ (JMS, AMQP), chaque connexion à une file d'attente nécessite un thread... donc beaucoup de files d'attente = beaucoup de threads fonctionnant en permanence. Mais c'est surtout un problème de client. Je pense qu'ActiveMQ Apollo a un client basé sur Netty.

Enfin, RabbitMQ et Akka font vraiment bon ménage. Vous pouvez utiliser Akka comme un wrapper pour RabbitMQ, notamment parce que RabbitMQ ne vous aide pas à gérer la consommation des messages et à les acheminer localement (dans une seule JVM).

4voto

Dean Wampler Points 960

Je ne suis pas un expert en systèmes de messagerie, mais vous pouvez les combiner avec Akka dans vos applications, en obtenant le meilleur des deux mondes. Voici un exemple que vous pourriez trouver utile pour expérimenter avec Akka et les systèmes de messagerie, dans ce cas ZeroMQ :

https://github.com/zcox/akka-zeromq-java

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