我有cxf网络服务,我正在使用异步方法调用。我使用回调方法(使用javax.xml.ws.AsyncHandler - http://cxf.apache.org/docs/developing-a-consumer.html)获取响应如下
Future<?> asyncResponse = myWebService.testMethodAsync(param, new MyAsyncHandler());
此方法正常,我得到了正确的响应。
我的问题是表现。我测量了上面一行的时间和我的应用程序显示大约2000ms只是为了上面的线(我用jmeter做了测试)。我的应用程序部署在tomcat中,并表示在jmeter启动近50个线程后发生异常延迟。在测试开始时延迟小于5ms。但几分钟之后突然达到接近1000毫秒,然后在97%到2000毫秒之间变化,97%的请求。
我使用独立的java cxf异步客户端代替Web应用程序进行了相同的测试,但是在上面的测试中,总是返回5ms以下。因此,我怀疑,在我的Web应用程序中,线程调度可能存在问题(因为我的Web应用程序在运行测试时做了很多其他事情而且我无法在不做出剧烈更改的情况下停止这些服务)或者是否还有其他问题在这里?可能用完了cxf异步客户端使用的线程池?
答案 0 :(得分:1)
问题是CXF在JDK中加载了默认的HTTPUrlConnection,它是同步的(加载管道是org.apache.cxf.transport.http.URLConnectionHTTPConduit
),因为类路径中不包含必要的jar。解决了类路径问题,现在正在加载正确的管道(org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit
)。更多信息可以在here