java - 线程化 apache cxf 客户端和高频请求的性能

标签 java performance cxf

我有一个相对简单的 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 解决这种情况?它有效还是他们切换到了不同的库?如果您要从头开始,您将如何设计“小有效负载高频”交易?

最佳答案

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

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

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

希望这有帮助。

关于java - 线程化 apache cxf 客户端和高频请求的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578404/

相关文章:

mysql - MySQL中的 `COUNT(*)`和 `COUNT(date_created)`有区别吗

java - 获取 CXF 错误 : javax. xml.ws.WebServiceException:WSDL 元数据无法用于创建代理

java - 按钮找不到 Listener 类

Ubuntu 中的 Java 运行时错误 - 在代码中放置 javax.net.ssl.trustStore 的位置?

java - 有没有办法从 jtable 下载选定的行?

c# - 在单独的线程中延迟编译 .NET 正则表达式

具有推送/弹出且没有重复项的 Java 数据结构?

performance - GRAILS 2,内存问题

java - 请求/响应对象

web-services - cxf-codegen-plugin 不生成代码