使用Spring RestTemplateCustomizer

时间:2019-03-05 15:08:04

标签: java spring kotlin

当前,我们通过一些鱿鱼代理对单个请求进行代理,但是已经注意到,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,但是请求未按预期超时。

有什么想法吗?

0 个答案:

没有答案