cxf ws客户端向服务器发送请求的最佳实践(soap)

best practice for cxf ws client to send request to server (soap)

我有一个 spring 网络应用程序。有一个屏幕需要调用另一个 Web 服务(Soap 协议 - 不是 restful)。我正在使用 cxf 以合同优先的方式开发该 Web 服务客户端。基本上,我遵循 cxf 示例代码:

customerServiceService = new CustomerServiceService(wsdlURL);
CustomerService customerService = customerServiceService.getCustomerServicePort();
customerService.getCustomersByName("AAAA");

到目前为止一切顺利。但是现在从我的应用程序调用该 Web 服务的次数约为 10k/天。您知道如何改进我的代码或向 cxf 配置添加一些参数以优化该高容量的性能吗? 我无法修改服务器代码。问题仅针对我的客户端代码。

我能想到的改进之一是,避免为每个请求创建 Webservice 对象。只要您没有修改拦截器等,客户端就是线程安全的。请检查 here 了解更多信息。

我相信您一定没有为每个请求创建网络服务客户端。如果是,则创建客户端的 bean 并将其注入 spring 配置。

Cxf可以通过SpringBus配置,所以配置cxf总线,提供no。根据您的要求连接。

SpringBus bus = new SpringBus();
        bus.setProperty(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE);
        bus.setProperty("org.apache.cxf.transport.http.async.SO_KEEPALIVE",Boolean.TRUE);
        bus.setProperty("org.apache.cxf.transport.http.async.SO_TIMEOUT",Boolean.FALSE);
        bus.setProperty("org.apache.cxf.transport.http.async.MAX_CONNECTIONS","totalConnections"));
                bus.setProperty("org.apache.cxf.transport.http.async.MAX_PER_HOST_CONNECTIONS","connectionsPerHost"));

默认总连接数为 5000,因此默认值可能就足够了。 我认为此配置应该会给您带来性能优势。