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