В настоящее время мы передаем один запрос через некоторые прокси-серверы squid, но заметили, что настройки тайм-аута 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()
Как мы можем видеть из приведенного выше, я установил тайм-аут подключения / чтения на 1 мс только для целей тестирования, но время ожидания запросов не соответствует ожидаемому.
Есть идеи?