1

次のような特定のRESTAPIへの同期呼び出しを行うメソッドがあります。

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);

お気づきのとおり、各リクエストを時間内に解析してDBに挿入できるように、呼び出しの間隔を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 in playの詳細については、http: //www.playframework.org/documentation/2.0.4/JavaAsyncを参照してください。

于 2012-10-13T21:16:42.150 に答える