混合Akka 2,Play2-mini框架和HTTP

Jac*_*ack 6 scala akka playframework play2-mini

随着Akka 2的发布,Akka HTTP模块已被替换为使用Play2-mini的选项,其中Play2-mini看起来像Play2减去模型视图控制器.

该线在实现REST服务和创建HTTP客户端之间变灰.例如,假设我想在一个服务(即HTTP代理)中创建Web服务(不一定是REST)和HTTP客户端.我使用Akka还是Play2-mini?

我已经在Finagle中创建了这样的服务,并希望用Akka和/或Play2-mini重做练习,看看它是如何比较的.

从高层次来看,架构是什么样的?这些产品如何结合在一起?

Ant*_*bbs 3

我想说喷雾是你最好的选择。但是,它不能与 Java 一起使用。我们正在使用 play2-mini 框架,但存在一些问题。目前尚不清楚如何使用 Java 将其连接到 Akka,而 Spray 完全是围绕这个概念构建的 - 当请求传入时,您会收到一条发送给 actor 的请求消息。

使用 Play,您必须滚动自己的连接:即,在静态(角色眼睛)请求方法内:

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;
Run Code Online (Sandbox Code Playgroud)

效果很好。Play 也在其系统中使用 AKKA 事件,因此您也可以使用它的 actor 上下文来创建 actor。

不幸的是,目前Play2-mini根本不是mini,它依赖于整个Play框架,这也导致了更多问题。显然他们正在开发一个简单的版本,据我所知,它将涉及将 Play 分成它的模块,而且我认为这种情况不会很快发生。

IMO,喷雾是一个更好的选择。它的流畅性适合AKKA,但不幸的是我必须在这里使用Java,所以我无法使用它: https: //github.com/spray/spray/issues/96

关于您的 http 客户端/服务问题 - AKKA 本身没有任何 HTTP 功能,因此您需要与 HTTP 服务器交互,在本例中为 play。您可以使用异步请求来保持连接处于活动状态,同时您的 actor 系统将消息异步传递到您的 http 客户端 actor 以异步获取 http 响应,将消息发送回 Web 服务层,然后交还给播放。

希望这能消除一些困惑。我也很困惑,直到几天的研究;)如果还有什么我可以帮助澄清的,请告诉我 - 为了社区的利益!;)

Spray 可以有一个异步 http 客户端,但对于我们这些困在 Java 领域的人来说,还有:https: //github.com/sonatype/async-http-client,您可能可以与 AKKA 一起使用。