我有一个春季网络应用程序。有一个屏幕需要调用另一个网络服务(Soap协议 - 不是休息(。我正在使用 cxf 以合约优先的方法开发该 Web 服务客户端。基本上,我遵循 cxf 示例代码:
customerServiceService = new CustomerServiceService(wsdlURL);
CustomerService customerService = customerServiceService.getCustomerServicePort();
customerService.getCustomersByName("AAAA");
目前为止,一切都好。但是现在从我的应用程序调用该 Web 服务的数量约为 10k/天。您知道如何改进我的代码或向 cxf 配置添加一些参数以优化高容量的性能吗?我无法修改服务器代码。该问题仅适用于我的客户端代码。
您一定不能为每个请求创建Web服务客户端。如果是,则创建客户端的 bean 并将其注入 spring 配置。
Cxf可以通过SpringBus进行配置,因此请根据您的要求配置cxf总线并提供无连接。
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,因此默认值可能就足够了。我认为这种配置应该会给您带来性能优势。
我能想到的改进之一是,避免为每个请求创建 Web 服务对象。只要您没有修改拦截器等,客户端就是线程安全的。请查看此处以获取更多信息。