当前,我们通过一些鱿鱼代理对单个请求进行代理,但是已经注意到,RestTemplate的超时设置并未得到遵守...例如,我们看到一个请求需要3分钟。
代理本身可以正常工作。
代码如下:
class ProxyCustomizer(val config: Config) : RestTemplateCustomizer {
override fun customize(restTemplate: RestTemplate) {
if (placementConfig.proxy.url.isNotEmpty()) {
val proxyUrl = placementConfig.proxy.url
val proxy = HttpHost.create(proxyUrl)
val rabPricing = HttpHost.create(placementConfig.XXXX.url)
val httpClient = HttpClientBuilder
.create()
.setRoutePlanner(object : DefaultProxyRoutePlanner(proxy) {
override fun determineProxy(target: HttpHost, request: HttpRequest, context: HttpContext) =
if (target.hostName == rabPricing.hostName) {
logger.info { "Proxying connection to ${target.hostName} via $proxyUrl" }
super.determineProxy(target, request, context)
} else {
null
}
})
.build()
val requestFactory = HttpComponentsClientHttpRequestFactory(httpClient)
restTemplate.requestFactory = requestFactory
}
}
companion object : KLogging()
}
上面是一个豆子。
@Bean(name = ["ProxyRestTemplate"])
fun proxyRestTemplate(
credential: Credential,
proxyCustomizer: ProxyCustomizer,
meterRegistry: MeterRegistry,
restTemplateExchangeTagsProvider: RestTemplateExchangeTagsProvider
) = RestTemplateBuilder()
.additionalCustomizers(proxyCustomizer)
.setConnectTimeout(1)
.setReadTimeout(1)
.additionalCustomizers(
MetricsRestTemplateCustomizer(
meterRegistry,
restTemplateExchangeTagsProvider,
"http.client.requests"
)
)
.setCredential(credential)
.build()
正如我们在上面看到的,我仅出于测试目的将连接/读取超时设置为1ms,但是请求未按预期超时。
有什么想法吗?