spring-cloud-openfeign icon indicating copy to clipboard operation
spring-cloud-openfeign copied to clipboard

Default http client (Client.Default) seems not taking 'spring.cloud.openfeign.httpclient' properties when creating feign client with FeignClientBuilder

Open Siegolas opened this issue 3 months ago • 1 comments

I'm creating feign clients using method FeignClientBuilder(context). I'm trying to check the effect of "maxConnections" and "maxConnectionsPerRoute" properties from "spring.cloud.openfeign.httpclient" it seems they are not applied. I'm applying the properties:

spring:
    cloud:
        openfeign:
            httpclient:
                max-connections: 1
                max-connections-per-route: 1

I'm using spring-cloud-openfeign version 4.0.3

A sample of how I create the feign client:

private val target = FeignClientBuilder(context)
        .forType(PhoneMaskingServiceFeignClientExtension::class.java, PHONEMASKINGSERVICE)
        .url(phoneMaskingServiceConfig.url)
        .customize {
            it
                .encoder(GsonEncoder())
                .decoder(gsonDecoder)
                .requestInterceptors(RequestInterceptors.create())
                .requestInterceptor(OpenApiInterceptor())
                .requestInterceptor(HeadersInterceptor(headersConfig.getForwardingHeaders()))
                .requestInterceptor(
                    BasicAuthRequestInterceptor(
                        phoneMaskingServiceConfig.api.user,
                        phoneMaskingServiceConfig.api.password
                    )
                )

        }.build()

However when I force the client to be ApacheHttpClient one and I manually apply the mentioned properties it works as expected and when applying load testing the execution produces timeouts

private val target = FeignClientBuilder(context)
        .forType(PhoneMaskingServiceFeignClientExtension::class.java, PHONEMASKINGSERVICE)
        .url(phoneMaskingServiceConfig.url)
        .customize {
            it
                .encoder(GsonEncoder())
                .decoder(gsonDecoder)
                .client(
                    ApacheHttpClient(
                        HttpClientBuilder.create()
                            .setMaxConnPerRoute(1)
                            .setMaxConnTotal(1)
                            .build()
                    )
                )                
                .requestInterceptors(RequestInterceptors.create())
                .requestInterceptor(OpenApiInterceptor())
                .requestInterceptor(HeadersInterceptor(headersConfig.getForwardingHeaders()))
                .requestInterceptor(
                    BasicAuthRequestInterceptor(
                        phoneMaskingServiceConfig.api.user,
                        phoneMaskingServiceConfig.api.password
                    )
                )

        }.build()

So is there anything wrong in my setup? How can I achieve httpclient props max-connections and max-connections-per-route from "spring.cloud.openfeign.httpclient" are properly applied when using FeignClientBuilder? Is FeignClientBuilder applying "spring.cloud.openfeign.httpclient" properties for the default http client?

Thanks in advance

Siegolas avatar May 04 '24 12:05 Siegolas