2012-07-20 138 views
2

我有一个相对简单的java服务,从各种SOAP Web服务中获取信息,并使用apache cxf 2.5.2。该服务启动20个工作线程,每小时通过1000-8000个请求,每个请求可以根据请求的性质进行2-5次Web服务调用。螺纹apache cxf客户端和高频请求的性能

设置

  1. 我使用的web服务的连接
  2. 连接超时被设置为2秒,以便有效地解决现实的请求的体积连接池。
  3. 所有连接都通过http代理发送出去。
  4. 20个工作线程
  5. Grunty 16 CPU箱

的问题是,我开始看到“连接超时”在日志和相当多的人的错误,它似乎应用服务也会影响机器的网络性能,因为命令行中的curl需要5秒钟才能建立与相同Web服务的连接。但是,当我停止服务应用程序时,卷曲性能急剧提高至< 5ms

其他人如何使用CXF解决这种情况?它工作还是他们切换到不同的图书馆?如果您要从头开始,您将如何设计'小载荷高频率'交易?

回答

2

一旦我们遇到类似的问题,请求花费很长时间才能完成。这不是CXF问题,每个Web服务的堆栈都会在很频繁的请求中运行很久。

为了解决这个问题,我们实现了JMS EJB消息驱动bean。流程如下:当用户将请求发送到Web服务时,所有请求都被放入队列JMS,以便对用户的响应非常迅速,请求留在后台进行处理。之后,用户能够看到他们的操作:如果他们仍然被发送处理,如果他们正在处理,成功完成或者由于某种原因未能完成。

如果我必须设计频繁的交易应用程序,我肯定会使用JMS

希望这会有所帮助。