簡體   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