我的 Java Play2 应用程序正在调用一些外部 Web 服务以通过同步的 3rd 方客户端库获取数据。对于这个应用程序,我需要高流量和可扩展性。
播放文档说:
您的代码可能会阻塞的情况包括: 通过第三方客户端库使用 REST/WebService API (即,不使用 Play 的异步 WS API)[...]
请注意,您可能会因此将阻塞代码包装在 Futures 中。这并不意味着它是非阻塞的,它只是意味着阻塞将发生在不同的线程中[...]
相反,以下类型的 IO 不会阻塞: Play WS API,...
在 Play2 Java 应用程序中,使用 Promise 使事情异步并不是很有用,因为默认播放池用于 Futur 任务。结果,使用大量 Futur 将导致与仅使用具有大型默认线程池的同步调用相同的结果:同一池中的线程数大致相同。
所以我的问题是:
- Java API 中的 play.libs.WS API 真的是异步的(不阻塞播放默认池中的任何线程)吗?
- 如果我想要高流量和可扩展性,我应该总是使用它而不是我的 3rd 方客户端库吗
- play.libs.WS API 使用的线程池是什么?如果我的应用程序执行了很多 WS 调用,我应该增加它的大小吗?
- 有没有办法像 play.libs.WS API 一样异步,通过将第 3 方同步客户端包装在期货中?
非常感谢
洛伊克