Тайм-аут соединения не работает при использовании Spring RestTemplateCustomizer - PullRequest
0 голосов
/ 05 марта 2019

В настоящее время мы передаем один запрос через некоторые прокси-серверы 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 мс только для целей тестирования, но время ожидания запросов не соответствует ожидаемому.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...