随着Akka 2的发布,Akka HTTP modules已被替换为使用Play2-mini的选项,其中Play2-mini看起来像Play2减去模型视图控制器。
该线在实现REST服务和创建HTTP客户端之间变灰。例如,假设我想在一个服务(即HTTP代理)中创建Web服务(不一定是REST)和HTTP客户端。我使用Akka还是Play2-mini?
我已经在Finagle中创建了这样的服务,并希望用Akka和/或Play2-mini重做练习,看看它是如何比较的。
在高层次上,架构是什么样的?这些产品如何结合在一起?
答案 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