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

时间:2012-03-06 14:53:44

标签: scala playframework akka play2-mini

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

使用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;

效果很好。 Play也在其系统中使用AKKA事件,所以你也可以使用它的演员上下文创建你的演员。

不幸的是,目前,Play2-mini根本不是迷你版,它取决于整个Play框架,这也会导致更多问题。显然他们正在进行一项简单的发布,AFAIK将把Play拆分为模块,我不会很快看到这种情况发生。

IMO,Spray是一个更好的选择。使用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一起使用。

答案 1 :(得分:1)

自从提出这个问题以来,我在Akka官方博客上发现了这篇精彩帖子:

http://letitcrash.com/post/17888436664/a-sample-application-showcasing-play-mini-and-akka