Performance Play Framework 2.1:Play.libs.WS的性能问题
我有一个Play2.1JavaWebService,它调用另一个webservice。 我的服务通过转换其他Web服务的XML响应来提供JSON 最初,我使用Jersey客户端库调用我的第二个服务。 因为这是一个阻塞调用,所以我修改了设置,允许并行中有500个线程。 我的测试结果很好,我做了一个gatling测试,速度非常快(在远程服务器上处理10000个请求需要32秒) 然后我决定只使用异步调用来优化I/O。 现在,我使用play.libs.WS客户端,而不是带有默认线程池参数的jersey阻塞客户端。 我使用承诺来获得结果,但我的其余代码与以前完全相同 奇怪的是,我的gatling测试(只是一个发送一些httpget请求的循环)的性能下降了,速度慢了10倍多 我试图增加“默认调度程序”的线程数,但效果并不好 可能是因为一个线程在WS调用后处理XML和Json转换吗 该应用程序的结构如下所示:Performance Play Framework 2.1:Play.libs.WS的性能问题,performance,playframework,playframework-2.1,Performance,Playframework,Playframework 2.1,我有一个Play2.1JavaWebService,它调用另一个webservice。 我的服务通过转换其他Web服务的XML响应来提供JSON 最初,我使用Jersey客户端库调用我的第二个服务。 因为这是一个阻塞调用,所以我修改了设置,允许并行中有500个线程。 我的测试结果很好,我做了一个gatling测试,速度非常快(在远程服务器上处理10000个请求需要32秒) 然后我决定只使用异步调用来优化I/O。 现在,我使用play.libs.WS客户端,而不是带有默认线程池参数的jersey阻
//controller :
Promise<Response> = myService.remoteEntities();
return async(promise.map(new Function<Response, Result>() {
public Result apply(Response response) {
List<Entity> entities = // ... XPATH and DOM parsing
return ok(jsonp(callback, toJson(entities)));
}
});
//控制器:
Promise=myService.remoteEntities();
返回async(promise.map(新函数(){
公开结果应用(响应){
列出实体=/…XPATH和DOM解析
返回ok(jsonp(回调,toJson(实体));
}
});
myService.remoteEntities的定义如下:
public Promise<List<Entity>> myServiceMethod {
return WS.url(url.toString())
}
公共承诺myServiceMethod{
返回WS.url(url.toString())
}
注意:myService是一个spring服务单例,我的路由/控制器使用带有“@”符号的spring
我把它放在一个单独的类中,以便能够在测试中使用mock
谢谢,
洛伊奇
注意:我最初在这里发布了我的问题: