I would say that Spray is your best bet. However, it cannot be used with Java. We use the play2-mini platform, but there are some problems. It is not clear how to connect it to Akka with Java, compared to Spray, which is completely built around the concept - when a request arrives, you get a "Request" message for the actor.
In Play, you must flip your own connection: Ie, inside the static request method (eye roles):
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);
It works well. And Play also uses AKKA on this system, so you can create your actor using the actor context.
Unfortunately, at present, the Play2-mini is not at all mini, it depends on the entire structure of the Play, which also causes more problems. Apparently, they are working on the release of bare bones, which AFAIK is going to involve in the game sharing Play in its modules, and I do not see this happening in the near future.
IMO, Spray is a much better choice. This fluency fits much better with AKKA, but unfortunately I have to use Java here, so I could not use it: https://github.com/spray/spray/issues/96
As for your question about http clients / services - AKKA does not have any HTTP capabilities, so you need to interact with the HTTP server, in this case play. You can use Async requests to keep the connection alive while your actors system asynchronously sends messages to your client client to asynchronously receive an HTTP response by sending the message back to the web service level, returning to playback.
Hope this confuses some confusion. I was also confused, until several days of research;) If there is anything else I can help clarify, please let me know - for the benefit of the community !;)
Spray can has async http client, but for us people stuck in Java lands there is also: https://github.com/sonatype/async-http-client , which you can use possibly with AKKA.