为什么在部署后不考虑等待?

时间:2012-10-12 14:38:56

标签: playframework-2.0 cloudbees

我有一个方法可以对特定的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秒,因此可以及时解析每个请求并将其插入到DB中。一切都在本地很好用,但在我部署到云之后,所有这些都是连续的,没有任何等待(3秒)请求之间......

你知道为什么吗?

1 个答案:

答案 0 :(得分: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 in play的更多文档,请阅读http://www.playframework.org/documentation/2.0.4/JavaAsync