繁体   English   中英

Java Apache HTTP客户端上的代理超时

[英]Proxy timeouts on Java Apache HTTP client

我在Spring WebTemplate上设置的代理有问题。 构建HTTP客户端org.apache.http.client.config.RequestConfig.Builder时,我设置了超时时间:

- connectTimeout = 1000
- connectionRequestTimeout = 2000
- socketTimeout = 6000
- proxy = #{ T(org.apache.http.HttpHost).create('${proxyUrl}') }

接下来,我将以上内容用作工厂bean放入HttpClientBuilder中:

<bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder">
<property name="defaultRequestConfig">
<bean class="org.apache.http.client.config.RequestConfig" factory-bean="httpRequestConfigBuilder" factory-method="build"/>
</property>
</bean>

并设置WebTemplate messageSender:

<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<constructor-arg>
<bean class="org.apache.http.impl.client.DefaultHttpClient" factory-bean="httpClientBuilder" factory-method="build" />
</constructor-arg>
</bean>
</property>

和WebTemplate

<bean class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg>
        <bean class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
            <property name="soapVersion">
                <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_11" />
            </property>
        </bean>
    </constructor-arg>
    <property name="defaultUri" value="${endpoint.url}" />
    <property name="messageSender">
        <bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
            <constructor-arg>
                <bean class="org.apache.http.impl.client.DefaultHttpClient" factory-bean="httpClientBuilder" factory-method="build" />
            </constructor-arg>
        </bean>
    </property>
</bean>

我的问题是,尽管我将超时设置为1、2和6秒,但是由于代理服务器的原因,需要75秒才能返回错误(很可能来自代理服务器,网络不可用)。

如果删除代理,连接将按预期超时。

有没有一种方法可以将使用代理的超时时间强制设置为1秒? 在JEE容器上运行,因此无法生成另一个线程。

原来是因为这个错误: https : //issues.apache.org/jira/browse/HTTPCLIENT-1478

一旦添加了SocketConfig,超时就得到遵守:

<bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder">
     …….
   <property name="defaultSocketConfig" >
        <bean class="org.apache.http.config.SocketConfig" factory-bean="socketConfigBuilder" factory-method="build"/>
    </property>
</bean>

<bean id="socketConfigBuilder" class="org.apache.http.config.SocketConfig.Builder">
    <property name="soTimeout" value="${connect_timeout}"/>
</bean>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM