1

我有一个方法可以对特定的 REST api 进行一些同步调用,例如:

WSRequestHolder url = WS.url("rest_api_url");
Promise<WS.Response> promisePerPage = url.get();
promisePerPage.getWrappedPromise().await(3000, TimeUnit.MILLISECONDS);
WS.Response responsePerPage = promisePerPage.get();
ProductsWrapper productsWrapper = new Gson().fromJson(responsePerPage.getBody(), ProductsWrapper.class);

如您所见,我在两次调用之间设置了 3 秒,以便可以及时解析每个请求并将其插入数据库中。一切都在本地运行良好,但在我部署到云后,一切都在持续进行,请求之间不再等待(3 秒)......

你知道为什么吗?

4

1 回答 1

1

您需要使用 play 的异步功能。

我在http://play2-on-cb-features-test.hadashi.cloudbees.net/java/async-test进行了测试,它会在 3 秒后返回一些东西。

我在https://github.com/CloudBees-community/play2-on-cb-features-test/blob/master/app/controllers/JavaTest.java#L13提供了一些示例代码

Play 不会运行很多请求线程,因此它会输出太长的请求。我想可能有不同的生产设置。您可以在 Akka 配置中修改此行为,但最好只使用 Async 支持。

有关 Async 的更多文档,请阅读http://www.playframework.org/documentation/2.0.4/JavaAsync

于 2012-10-13T21:16:42.150 回答