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

时间:2017-04-10 06:54:39

标签: performance web-services cxf webservice-client webservices-client

我有一个spring webapp。屏幕需要调用另一个Web服务(Soap协议 - 不安宁)。我正在使用cxf以合同优先方法开发该Web服务客户端。基本上,我遵循cxf示例代码:

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我相信你不能按要求创建webservice客户端。如果是,则创建客户端的bean并以spring配置注入它。

可以通过SpringBus配置Cxf,因此配置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,因此默认值可能就足够了。 我认为这种配置应该会给您带来性能优势。