首页 > 解决方案 > spirngframework.ws HttpComponentsMessageSender - 如何设置每个主机的最大连接数?

问题描述

我正在从 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 中使用“*”相同的结果?

标签: javaspringapache-httpclient-4.xspring-framework-beans

解决方案


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

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

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


推荐阅读