随着Akka 2的发布,Akka HTTP模块已被替换为使用Play2 mini的选项,其中Play2 mini看起来像Play2减去模型视图控制器。
实现REST服务和创建HTTP客户端之间的界限变灰了。例如,假设我想在一个服务中创建一个web服务(不必是REST)和一个HTTP客户端,即HTTP代理。我用阿卡还是Play2 mini?
我在Finagle中创建了这样一个服务,我想用Akka和/或Play2 mini重新进行练习,看看它的对比如何。
从高层来看,体系结构是什么样子的?这些产品是如何组合在一起的?
我认为Spray是您的最佳选择。但是,它不能与Java一起使用。我们正在使用play2迷你框架,但存在一些问题。目前还不清楚如何使用Java将其连接到Akka,而Spray则完全围绕着这个概念构建——当请求进来时,你会收到一条发给参与者的请求消息。
使用Play,您必须建立自己的连接:I.e,在静态(角色眼睛)请求方法内:
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根本不是mini,它取决于整个Play框架,这也导致了更多的问题。显然,他们正在进行一个基本的发布,AFAIK将把Play分成它的模块,我认为这不会很快发生。
IMO,喷雾是一个更好的选择。它的流畅性与AKKA更适合,但不幸的是,我必须在这里使用Java,所以我不能使用它:https://github.com/spray/spray/issues/96
关于您的http客户端/服务问题,AKKA本身没有任何http功能,因此您需要与http服务器接口,在本例中就是这样。您可以使用异步请求来保持连接的有效性,而您的actor系统将消息异步传递给http客户端actor以异步获得http响应,并将消息发送回Web服务层,然后返回播放。
希望这能消除一些困惑。我也很困惑,直到几天的研究;)如果我还有什么可以帮助清理的,请告诉我——为了社区的利益!)
Spray可以有一个异步http客户端,但对于我们这些困在Java领域的人来说,还有:https://github.com/sonatype/async-http-client,您可能可以与AKKA一起使用。
问了这个问题后,我在Akka官方博客上发现了一篇很棒的帖子:
http://letitcrash.com/post/17888436664/a-sample-application-showcasing-play-mini-and-akka