CXF 异步调用异常延迟

CXF Async call unsual delay

我有 cxf 网络服务,我正在使用异步方法调用。我正在使用回调方法(使用 javax.xml.ws.AsyncHandler - http://cxf.apache.org/docs/developing-a-consumer.html )来获得如下响应

 Future<?> asyncResponse = myWebService.testMethodAsync(param, new MyAsyncHandler());

此方法效果很好,我得到了正确的响应。

我的问题是性能。我测量了上面一行所花费的时间,我的应用程序显示大约 2000 毫秒只是上面一行(我使用 jmeter 进行了测试)。我的应用程序部署在 tomcat 中,并指出在 jmeter 启动近 50 个线程后发生异常延迟。测试开始时延迟低于 5ms。但几分钟后它突然达到近 1000 毫秒,然后对于 97% 的请求在大约 900 毫秒到 2000 毫秒之间变化。

我使用独立的 java cxf 异步客户端而不是 Web 应用程序进行了相同的测试,但在上面那行的测试中总是 return 不到 5 毫秒。因此,我怀疑,在我的 Web 应用程序中,线程调度可能存在问题(因为我的 Web 应用程序在 运行 测试时做了很多其他事情,我无法在不进行重大更改的情况下停止这些服务)或者是否存在还有其他问题吗?可能 运行 超出了 cxf 异步客户端使用的线程池?

问题是 CXF 加载 CXF 在同步的 JDK 中加载默认 HTTPUrlConnection(加载的管道是 org.apache.cxf.transport.http.URLConnectionHTTPConduit),因为 classpath 中不包含必需的 jar。解决了 class 路径问题,现在加载正确的管道(org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit)。可以在 here

中找到更多信息