2012-03-06 1 views
6

Con il rilascio di Akka 2, l'Akka HTTP modules è stato sostituito con l'opzione di utilizzare Play2-mini, in cui Play2-mini sembra Play2 meno il controller di visualizzazione del modello.Blending Akka 2, il framework Play2-mini e HTTP

La riga equivale tra l'implementazione di un servizio REST e la creazione di un client HTTP. Ad esempio, supponiamo di voler creare un servizio Web (non deve essere REST) ​​e un client HTTP in un servizio, ovvero un proxy HTTP. Uso Akka o Play2-mini?

Ho creato un servizio simile in Finagle e vorrei ripetere l'esercizio con Akka e/o Play2-mini per vedere come si confronta.

Ad un livello elevato, che aspetto ha l'architettura? Come si integrano questi prodotti?

+1

si potrebbe trovare [spruzzo] (https://github.com/spray/spray) interessante. È costruito su Akka (1.3 per ora, ma la migrazione ad Akka 2 è in una roadmap) e ha sia server che client. Spero di non essere importunato qui, solo pensando che lo spray meriti una certa attenzione. – elbowich

+0

@elbowich Grazie.Se siete a conoscenza di tali esempi di spray utilizzati come proxy o gateway, mi piacerebbe anche dargli un'occhiata. Sto cercando di costruire il mio bagaglio di competenze su tutto ciò che è necessario per creare qualsiasi soluzione basata su Scala. Ci sono così tante opzioni, che a un certo punto si deve sceglierne una e attenersi ad essa. Non so ancora quale ... ancora ;-) Penso che lo stack TypeSafe (Scala, Akka, Play) abbia una grande promessa. È solo un po 'di confusione al momento – Jack

+1

Ecco qui: https://gist.github.com/2008342. Avrai bisogno di spray-server, spray-client e spray-can per eseguirlo. – elbowich

risposta

3

Direi che lo Spray è la soluzione migliore. Tuttavia, non può essere utilizzato con Java. Stiamo usando il framework play2-mini, ma ci sono alcuni problemi. Non è chiaro come collegarlo ad Akka, con Java, rispetto a Spray che è interamente costruito attorno alla nozione - quando arriva una richiesta, si ottiene un messaggio di richiesta ad un attore.

Con Play, si devono rotolare il proprio collegamento: cioè, all'interno del metodo di richiesta static (ruoli occhi):

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; 

che funziona bene. E Play utilizza anche AKKA Eventing nel suo sistema, quindi puoi creare il tuo attore anche usando il suo contesto di attore.

Sfortunatamente, al momento, Play2-mini non è affatto minimale, dipende dall'intero framework Play, che causa anche più problemi. Apparentemente stanno lavorando a una versione snella, che AFAIK sta per coinvolgere dividendo Play nei suoi moduli, e non vedo che succederà presto.

IMO, Spray è una scelta molto migliore. E 'adatta fluentness molto meglio con AKKA, ma unfort devo usare Java qui, così non ho potuto usarlo: https://github.com/spray/spray/issues/96

Per quanto riguarda il vostro client http/servizi questione - AKKA non ha alcun HTTP funzionalità stessa, quindi è necessario interfacciarsi con un server HTTP, in questo caso play. È possibile utilizzare le richieste asincrone per mantenere attiva la connessione, mentre il sistema dell'attore passa in modo asincrono i messaggi al proprio client client http per ottenere in modo asincrono una risposta http, inviando il messaggio al livello del webservice e restituendolo alla riproduzione.

Speriamo che questo chiarisca un po 'di confusione. Ero anche abbastanza confuso, fino a un paio di giorni di ricerche;) Se c'è qualcos'altro che posso aiutare a chiarire, per favore fatemelo sapere - per il bene della comunità! ;)

Spray can ha un client http async, ma per noi gente bloccata in Java, c'è anche: https://github.com/sonatype/async-http-client, che è possibile utilizzare con AKKA probabilmente.