2012-06-27 87 views
10

虽然我已经阅读了一段时间,但对于使用Play框架以及Akka进行编程,我还是相当新的。我现在在默认/基本Play环境中启动一个概念验证应用程序。我的问题来自Play中的Web服务客户端API(http://www.playframework.org/documentation/2.0.1/ScalaWS)。使用Akka从Play应用程序进行Web服务调用

该应用程序基本上需要以尽可能可扩展和高性能的方式调用对远程SOAP Web服务的调用。浏览器使用JSON进行ajax调用,Play应用程序需要将它们转换为SOAP/XML,反之亦然。

如果我通过控制器直接使用play web服务客户端,这些调用可以是异步的,这比我们现在做的更好(阻塞)。但是,我不清楚这种情况在重负载下会如何表现。并发/线程管理将主要留给底层的Netty服务器吗?我有什么方法可以调整它吗?

另一种方法是从控制器中使用Akka actor系统,在那里我可以控制路由策略,池大小,容错等。如果我采取这种方法,是否仍然有意义使用Play的异步WS客户?如果是这样,这种方法(构成未来?)是否是推荐的模式?

似乎使Akka方法更具吸引力的另一个因素是,此应用程序最终还会承担其他一些责任,因此我们可以控制/调整允许此ActorSystem的资源并降低整个应用程序被SOAP服务。

回答

5

您详细介绍这两个选项将工作:

  • 使用播放API的WS来处理请求/响应异步
  • 使用阿卡做同样的事情,管理您的WS调用同步你的演员

首先,没有对错的解决方案。

玩! WS API解决方案接缝最容易实现和测试。社区中的许多人都依赖它(我这样做)。另一方面,即使Akka解决方案接缝较重(没那么多),但它在将来会带给您更多的灵活性。您可以简单地使用并使用承诺进行异步计算。还有implicit conversions between play promises and akka future。最后,要监视你的演员,你可以看看Typesafe console

如果最重要的是性能,过早优化通常会导致更多(和不必要的)复杂性。就我而言,我将从API WS开始,如果将来需要转向Akka解决方案。

+2

其实,我想知道的第二个选项是一种双异步。演员是否仍然可以使用WS API(或底层的ning异步httpclient)? – anchormath

+0

您通过WS请求获得承诺。演员仍然可以使用它。 – iwalktheline

相关问题