2012-03-06 11 views
6

Con el lanzamiento de Akka 2, el Akka HTTP modules ha sido reemplazado con la opción de usar Play2-mini, donde Play2-mini se parece a Play2 menos el controlador de vista de modelo.Mezcla de Akka 2, el framework Play2-mini y HTTP

La línea aparece entre la implementación de un servicio REST y la creación de un cliente HTTP. Por ejemplo, supongamos que quiero crear un servicio web (no tiene que ser REST) ​​y un cliente HTTP en un servicio, es decir, un proxy HTTP. ¿Uso Akka o Play2-mini?

He creado un servicio de este tipo en Finagle y me gustaría volver a hacer el ejercicio con Akka y/o Play2-mini para ver cómo se compara.

En un nivel alto, ¿cómo se ve la arquitectura? ¿Cómo encajan estos productos?

+1

que podrían encontrar [aerosol] (https://github.com/spray/spray) interesante. Está construido sobre Akka (1.3 por ahora, pero la migración a Akka 2 está en una hoja de ruta) y tiene servidor y cliente. Espero no ser importunate aquí, solo pensar que el spray merece algo de atención. – elbowich

+0

@elbowich Gracias.Si conoce algún ejemplo de aerosol utilizado como proxy o puerta de enlace, me gustaría echarle un vistazo. Estoy tratando de construir mi conjunto de habilidades sobre todo lo necesario para crear cualquier solución basada en Scala. Hay tantas opciones, que en algún momento uno tiene que elegir una y quedarse con ella. Simplemente no sé cuál ... todavía ;-) Creo que la pila TypeSafe (Scala, Akka, Play) tiene una gran promesa. Es un poco confuso por el momento – Jack

+1

Aquí tienes: https://gist.github.com/2008342. Necesitará un servidor de pulverización, un cliente de pulverización y una lata de pulverización para ejecutarlo. – elbowich

Respuesta

3

Yo diría que Spray es su mejor opción. Sin embargo, no se puede usar con Java. Estamos utilizando el framework play2-mini, pero hay algunos problemas. No está claro cómo conectarlo a Akka, con Java, en comparación con Spray, que está completamente construido alrededor de la noción: cuando llega una solicitud, se obtiene un mensaje de solicitud a un actor.

Con Play, tienes que rodar su propia conexión: es decir, dentro del método de petición estática (papeles ojos):

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; 

que funciona bien. Y el juego también utiliza el evento AKKA en su sistema, por lo que puedes crear el actor usando el contexto del actor.

Desafortunadamente, actualmente, Play2-mini no es mini en absoluto, depende de todo el framework Play, lo que también causa más problemas. Aparentemente están trabajando en una versión escueta, que AFAIK va a implicar dividir Play en sus módulos, y no veo que eso suceda pronto.

IMO, Spray es una opción mucho mejor. Es fluentness encaja mucho mejor con AKKA, pero unfort tengo que utilizar Java aquí, así que no podría utilizarlo: https://github.com/spray/spray/issues/96

Con respecto a su pregunta de cliente HTTP/servicios - AKKA no tiene ningún HTTP capacidades en sí, por lo que necesita una interfaz con un servidor HTTP, en este caso, jugar. Puede usar las solicitudes Async para mantener viva la conexión, mientras que su sistema de actor transmite mensajes de manera asincrónica a su agente de cliente http para obtener asincrónicamente una respuesta http, enviando el mensaje de vuelta a la capa de servicio web, y regresando a reproducir.

Afortunadamente eso despeja la confusión. También estaba bastante confundido, hasta un par de días de investigación;) Si hay algo más que pueda ayudar a aclarar, háganmelo saber, ¡por el bien de la comunidad! ;)

La lata de pulverización tiene un cliente http asincrónico, pero para nosotros, las personas atrapadas en la tierra de Java, también existe: https://github.com/sonatype/async-http-client, que puede usar con AKKA probablemente.