gpt4 book ai didi

web-services - 客户端 spring-ws 连接池是否可能?

转载 作者:行者123 更新时间:2023-12-01 23:32:40 26 4
gpt4 key购买 nike

我们正在从 spring-ws 发起以下 SOAP 调用

<bean id="OrderSubmitWebServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<constructor-arg ref="messageFactory" />
<property name="marshaller" ref="serviceMarshaller"></property>
<property name="unmarshaller" ref="serviceMarshaller"></property>
<property name="defaultUri" value="${eoe.SubmitOrderWebService.url}" />
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<property name="connectionTimeout" value="${eoe.SubmitOrderWebService.connectionTimeout}" />
<property name="readTimeout" value="${eoe.SubmitOrderWebService.readTimeout}" />
</bean>
</property>
</bean>

来自 WebService-Hosting 的评论是:
您将许多单独的请求分组到单个 TCP 连接中的单个 HTTP 连接中。他们还说我们正在发送一个负载均衡器 cookie,将流量集中在一个 Web 服务器上(这可能是一些原因造成的,但很可能是因为您将这些连接保持了很长时间)。总体效果是降低了我们平衡负载的能力。

WS-Host 的推荐是:要么每个 TCP 连接只发送一个 WS 请求,要么定期断开连接。他们建议某处可能存在“保持事件超时”或“每个连接的最大请求数”设置。

我尝试添加以下 2 行,但我不相信这是问题的解决方案 - 因为 eoe.SubmitOrderWebService.url 应该是他们的负载均衡器 URL。
<property name="maxConnectionsPerHost"><map><entry key="${eoe.SubmitOrderWebService.url}" value="20" /></map></property>
<property name="maxTotalConnections" value="100"/>

我们正在使用
Tomcat -6.0.39 , JDK - 1.6, spring-ws-core : 2.1.2. 发布

2015 年 1 月 21 日更新 :我使用的是旧版本的 spring-ws 2.1.2.Release,因此它在下面 - 已将其更改为 2.1.4.RELEASE ...谢谢@ArtemBilan

基于以上 PoolingConnectionManager在每条路由的基础上和总共保持连接的最大限制。默认情况下,此实现将为每个给定路由创建不超过 2 个并发连接,并且总共不会创建超过 20 个连接。

2015 年 4 月 1 日更新 :我们被告知上述更改没有做出任何重大改进。

我们的 4 台服务器向负载均衡器提交了大约 25% 的请求,但它们的服务器处理在第一台服务器上为 11k,在第二台服务器上为 4k,其余 100 台由其他 3 台服务器处理,示意图如下:
                                                  ____ Server 1 - processed 11,000 requests
Our server 1 (sent 4k)---\ |Their WS| /___ Their Server 2 - processed 4,000
Our server 2 (sent 4k)--- \______|Load |_____/____ Server 3 - processed 100 requests
Our server 3 (sent 4k)----/ |Balancer| \____ Server 4 - processed 400 requests
Our server 4 (sent 4k)---/ |URL | \___ Server 5 - processed 500 requests

WS-Host 目前的评论如下:
  • 我们的应用程序关闭 TCP 连接的频率不够高。
  • 我们的应用程序(保持事件?)连接不允许 IHS 负载平衡器释放由我们的应用程序启动的原始请求启动的连接。

  • 任何改进建议表示赞赏..

    最佳答案

    如果我们看看 HttpComponentsMessageSender源代码,将看到它默认为池:

      /**
    * Create a new instance of the {@code HttpClientMessageSender} with a default {@link HttpClient} that uses a
    * default {@link PoolingClientConnectionManager}.
    */
    public HttpComponentsMessageSender() {
    DefaultHttpClient defaultClient = new DefaultHttpClient(new PoolingClientConnectionManager());
    defaultClient.addRequestInterceptor(new RemoveSoapHeadersInterceptor(), 0);
    ......

    因此,这是对您问题的可靠回答:不仅可能,而且默认情况下也是如此。

    然而,只有当我们使用 Commons HTTP 时,我们才拥有它。与标准 Java HttpURLConnection我们没有这样的选择。

    关于web-services - 客户端 spring-ws 连接池是否可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28034620/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com