【问题标题】:spirngframework.ws HttpComponentsMessageSender - how to set maximum connectons per any host?spirngframework.ws HttpComponentsMessageSender - 如何设置每个主机的最大连接数?
【发布时间】:2019-05-17 12:12:56
【问题描述】:

我正在从 apache httpclients-3.x 迁移到 4.x,因此必须将 org.springframework.ws.transport.http.CommonsHttpMessageSender 更新为 org.springframework.ws。 transport.http.HttpComponentsMessageSender

我之前的 spring-beans.xml 配置是这样的:

<bean id="signHttpSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
    <property name="maxConnectionsPerHost">
      <props>
        <prop key="*">20</prop>
      </props>
    </property>
  </bean>

“*”字符允许为任何给定主机设置最大连接数。

如果我尝试相同的配置,我会收到 java.lang.IllegalArgumentException: Host name may not be null。查看 HttpComponentsMessageSender 代码,我发现无法限制任何主机的连接数,只能限制每个主机的连接总数或最大连接数。

我怎样才能获得与在 CommonsHttpMessageSender 中使用“*”相同的结果?

【问题讨论】:

    标签: java spring apache-httpclient-4.x spring-framework-beans


    【解决方案1】:

    我发现了一些有效的肮脏解决方案。这绝对是错误的,但我会发布它,直到找到合适的,以防万一它会帮助某人。

    <bean id="signHttpSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
        <property name="credentials" value="#{signHttpSender.getHttpClient()
                         .getConnectionManager().setDefaultMaxPerRoute(20)}"/>
      </bean>
    

    您可以使用任何其他未初始化且为空的属性。但是,如果您必须为每个属性赋值,则此解决方案将不起作用。

    【讨论】:

      最近更新 更多