[英]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.