En ce moment, je regarde Play Framework et je l'aime beaucoup. Une des parties les plus annoncées parmi les fonctionnalités offertes dans Play est Akka .
Pour mieux comprendre Akka et comment l'utiliser correctement, pouvez-vous me dire quelles sont les alternatives dans d'autres langues ou produits?
Comment RabbitMQ se compare-t-il? Y a-t-il beaucoup de chevauchement? Est-ce pratique de les utiliser ensemble? Dans quels cas d'utilisation?
Le meilleur endroit pour commencer est un grande documentation officielle Akka . Je pense que le produit/cadre le plus proche d’Akka est erlang language. I suppose (je n'ai pas utilisé le framework Play) Akka est utilisé ici pour implémenter Comet et d'autres traitements asynchrones.
rabbitmq est quelque peu similaire dans les idées (infrastructure d'envoi de messages), notez que RabbitMQ est même écrit en erlang , mais leurs cas d'utilisation sont légèrement différents. Je dirais que bien que RabbitMQ se concentre sur la transmission de messages, Akka se concentre davantage sur les acteurs (destinataires et expéditeurs de messages).
J'utilise RabbitMQ + EventBus de Spring AMQP + Guava pour enregistrer automatiquement les messagers de type Actor à l'aide de EventBus de Guava pour la correspondance de modèle les messages reçus.
La similitude entre Spring AMQP et Akka est étrange. Spring AMQP's SimpleMessageListenerContainer + MessageListener est à peu près équivalent à un acteur.
Cependant à toutes fins pratiques, RabbitMQ est plus puissant qu'Akka dans la mesure où il possède de nombreux clients implémentations dans différentes langues, fournit la persistance (files d'attente durables), routage topologique et algorithmes QoS enfichables .
Cela étant dit, Akka est bien plus pratique et en théorie, Akka peut faire tout ce qui est décrit ci-dessus. Certaines personnes ont des extensions écrites, mais la plupart utilisent simplement Akka puis demandent à Akka de transmettre les messages via RabbitMQ. De plus, le conteneur Spring AMQP SimpleMessageListener est assez lourd et il est difficile de savoir ce qui se produirait si vous en créiez quelques millions.
Avec le recul, j'envisagerais d'utiliser Akka pour RabbbitMQ au lieu de Spring AMQP pour les projets futurs.
Le meilleur conseil que je puisse donner, car je suivais également le même processus de réflexion lorsque Play 2.0 avait rejoint Typesafe et commencé à utiliser davantage Akka, consistait à rechercher le "modèle d'acteur".
Wikipedia est une excellente ressource - http://fr.wikipedia.org/wiki/Actor_model . Il contient une liste de langages de programmation pouvant prendre en charge le modèle d'acteur, ainsi qu'une liste de cadres (y compris Akka) basés sur le modèle Acteur.
En termes simples, le modèle Acteur est basé sur le concept d’acteurs dans un modèle de calcul simultané. Acteurs ne signifie pas nécessairement la transmission de messages, mais dans la plupart des cas d'utilisation courants, les acteurs transmettent des messages (c'est là que les similitudes avec rabbitMQ entreront).
Akka est une boîte à outils et un environnement d’exécution permettant de construire concurrent & distribué systèmes. Pour ce faire, Akka utilise le modèle Actor. Si vous cherchez une alternative à Akka, je pense que vous ne pouvez pas trouver une solution complète comme Akka, car Akka possède plusieurs fonctionnalités qui vous permettent de développer un robuste concurrent & distribué système:
Mais je suggère de jeter un oeil à Erlang/OTP et Quasar .
http://scalecube.io est une bibliothèque complète de microservices à faible temps de latence qui vous permet de développer un système distribué et concurrent robuste.
Comme Akka: - repose sur le protocole de potins et de natation. - son message est basé sur protobuf (full duplex). - c'est pour la JVM. - une latence faible et environ 6 fois plus rapide. - utilise RxJava qui s'avère plus rapide que les flux akka.
Contrairement à Akka: - son moins avisé - pas un cadre. - ne forçant pas le motif Acteur en tant que motif holistique.
Vous pouvez également envisager d’utiliser Vertx, qui est également une plate-forme réactive http://vertx.io/
Là où vous pouvez considérer le Verticle ( http://vertx.io/docs/vertx-core/Java/#_verticles ) similaire au paradigme de l'acteur. Et le EventBus similaire à Databus of Akka ( http://vertx.io/docs/vertx-core/Java/#event_bus )