2

我有一个相对简单的 java 服务,它从各种 SOAP Web 服务中获取信息,并在后台使用 apache cxf 2.5.2 来实现。该服务启动 20 个工作线程,每小时处理 1000-8000 个请求,每个请求可以根据请求的性质进行 2-5 次 Web 服务调用。

设置

  1. 我在 Web 服务连接上使用连接池
  2. 连接超时设置为 2 秒,以便切实有效地处理请求量。
  3. 所有连接都通过 http 代理发出。
  4. 20 个工作线程
  5. Grunty 16 cpu 盒子

问题是我开始在日志中看到“连接超时”错误,而且其中有很多错误,而且应用程序服务似乎也影响了机器的网络性能,因为命令行中的 curl 只需 > 5 秒建立与相同 Web 服务的连接。但是,当我停止服务应用程序时,curl 性能大幅提高到 < 5ms

其他人是如何使用 CXF 解决这种情况的?它有效还是他们切换到不同的图书馆?如果您要从头开始,您将如何设计“小负载高频”事务?

4

1 回答 1

2

一旦我们遇到与您类似的问题,请求需要很长时间才能完成。这不是CXF问题,每个 Web 服务的堆栈对于非常频繁的请求都会运行很长时间。

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

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

希望这可以帮助。

于 2012-07-20T11:54:18.977 回答