2012-03-06 1 views
6

Avec la sortie de Akka 2, les Akka HTTP modules ont été remplacés avec l'option d'utiliser Play2-mini, où Play2-mini ressemble à Play2 moins contrôleur de vue de modèle.Fusionnant Akka 2, le cadre Play2-mini et HTTP

La ligne grise entre l'implémentation d'un service REST et la création d'un client HTTP. Par exemple, disons que je veux créer un service Web (ne doit pas être REST) ​​et un client HTTP dans un service, à savoir un proxy HTTP. Est-ce que j'utilise Akka ou Play2-mini?

J'ai créé un tel service dans Finagle et je voudrais refaire l'exercice avec Akka et/ou Play2-mini pour voir comment il se compare.

À un niveau élevé, à quoi ressemble l'architecture? Comment ces produits s'emboîtent-ils?

+1

Vous pourriez trouver [jet] (https://github.com/spray/spray) intéressant. Il est construit sur Akka (1.3 pour le moment, mais migrer vers Akka 2 est dans une feuille de route) et a à la fois le serveur et le client. J'espère que je ne suis pas importun ici, juste en pensant que le spray mérite une certaine attention. – elbowich

+0

@elbowich Merci.Si vous connaissez de tels exemples de pulvérisation utilisés comme proxy ou gateway, j'aimerais également y jeter un coup d'œil. J'essaie de construire mon ensemble de compétences autour de tout ce qui est nécessaire pour créer une solution basée sur Scala. Il y a tellement d'options, qu'à un moment donné, il faut en choisir une et s'en tenir à cela. Je ne sais pas encore ... mais ;-) Je pense que la pile TypeSafe (Scala, Akka, Play) est très prometteuse. C'est juste un peu déroutant en ce moment – Jack

+1

Voilà: https://gist.github.com/2008342. Vous aurez besoin de spray-server, spray-client et spray-can pour le faire fonctionner. – elbowich

Répondre

3

Je dirais que Spray est votre meilleur pari. Cependant, il ne peut pas être utilisé avec Java. Nous utilisons le framework play2-mini, mais il y a quelques problèmes. Il n'est pas clair comment le connecter à Akka, avec Java, par rapport à Spray qui est entièrement construit autour de la notion - quand une demande arrive, vous obtenez un message de demande à un acteur.

Avec le jeu, vous devez rouler votre propre connexion: i.e., dans la méthode de demande statique (rôles yeux):

Timeout timeout = new Timeout(Duration.parse("20 seconds")); 
Future<Object> future = Patterns.ask(myActor, new ClientMessage(null), timeout); 

Promise<Object> sdf = Akka.asPromise(future); 
Promise<Result> r2 = sdf.map(new Function<Object, Result>() { 

@Override 
public Result apply(Object a) throws Throwable { 
    val wsrm = (MyMessage)a; 
    return ok((wsrm).val); // String value from message object 
} 

}); 
Result test2 = async(r2); 
return test2; 

Ce qui fonctionne bien. Et Play utilise également les événements AKKA dans son système, ce qui vous permet de créer votre propre acteur en utilisant son contexte d'acteur.

Malheureusement, actuellement, Play2-mini n'est pas du tout mini, cela dépend de l'ensemble du cadre de jeu, ce qui provoque également plus de problèmes. Apparemment, ils travaillent sur une mise à jour des os, ce que AFAIK va impliquer de séparer le Play dans ses modules, et je ne vois pas cela se produire de sitôt.

IMO, Spray est un bien meilleur choix. Il est fluentness convient beaucoup mieux avec AKKA, mais présents mais malheureusement je dois utiliser Java ici, donc je ne pouvais pas l'utiliser: https://github.com/spray/spray/issues/96

En ce qui concerne votre client http/services question - AKKA n'a pas de HTTP capacités lui-même, de sorte que vous avez besoin d'interface avec un serveur HTTP, dans ce cas, jouer. Vous pouvez utiliser des requêtes asynchrones pour maintenir la connexion active, tandis que votre système d'acteur transmet de manière asynchrone des messages à votre acteur client http pour obtenir de manière asynchrone une réponse http, renvoyant le message à la couche de service Web, revenant en lecture.

Espérons que cela clarifie une certaine confusion. J'étais aussi très confus, jusqu'à quelques jours de recherche;) S'il y a autre chose que je peux aider à éclaircir, s'il vous plaît faites le moi savoir - pour le bien de la communauté! ;)

Spray peut avoir un client http async, mais pour nous les gens bloqués en Java land, il y a aussi: https://github.com/sonatype/async-http-client, que vous pouvez utiliser avec AKKA probablement.