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.
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
@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
Ecco qui: https://gist.github.com/2008342. Avrai bisogno di spray-server, spray-client e spray-can per eseguirlo. – elbowich