6

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

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

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

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

4

2 回答 2

3

我会说喷雾是你最好的选择。但是,它不能与 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 事件,所以你也可以使用它的 actor 上下文来创建你的 actor。

遗憾的是,目前 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 can 有一个异步 http 客户端,但对于我们这些困在 Java 领域的人来说,还有:https ://github.com/sonatype/async-http-client ,您可能可以将其与 AKKA 一起使用。

于 2012-04-12T14:31:39.293 回答
1

自从提出这个问题后,我在 Akka 官方博客上发现了这篇很棒的帖子:

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

于 2012-04-19T12:52:46.313 回答