播放2:play.libs.WS VS第三方客户端库以进行异步处理

Loi*_*oic 5 playframework playframework-2.0

我的Java Play2应用程序正在调用一些外部Web服务来通过同步第三方客户端库获取数据.对于这个应用程序,我需要高流量和可扩展性.

播放文档说:

您的代码可能阻止的情况包括:通过第三方客户端库使用REST/WebService API (即,不使用Play的异步WS API)[...]

请注意,您可能想要将您的阻止代码包装在Futures中.这不会使它成为非阻塞,它只是意味着阻塞将在不同的线程中发生[...]

相反,以下类型的IO不会阻塞: Play WS API,...

在Play2 Java应用程序中,使用promises使事情异步并不是很有用,因为默认的游戏池用于Futur任务.因此,使用大量Futur将导致与仅使用具有大型默认线程池的同步调用相同的事情:在同一池中大致相同数量的线程.

所以我的问题是:

  • 是Java API中的play.libs.WS API真的是异步的(不阻塞播放默认池中的任何线程)?
  • 如果我想要高流量和可扩展性,我应该总是使用它而不是我的第三方客户端库
  • 什么是play.libs.WS API使用的线程池,如果我的应用程序做了很多WS调用,我应该增加它的大小吗?
  • 是否有一种方法可以像play.libs.WS API一样异步,通过在期货中包装第三方同步客户端?

非常感谢

卢瓦克

Loi*_*oic 1

正如 Guillaume Bort 在 Play 邮件列表中所说,play.libs.WS API“有自己的线程池,由 AsyncHttp 库本身管理,但由于它在幕后使用 NIO,所以这并不重要,因为它基本上是真的非阻塞。”

因此应尽可能经常使用它。