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
Comment From: smileatom
@Siegolas I just had to debug this sadly . The httpclient property will not be applied to a client located at:
openfeign:
httpclient:
nor will it work under the default client If you want it to be set properly move the httpclient underneth your named feign client
my-feignclient:
httpclient:
foo:
That will work.
Comment From: OlgaMaciaszek
Hello @Siegolas, this is by design; if you choose to explicitly use Feign's Builder for creating client beans, it's logic will be used for building the beans, not the context-based logic that we use with @EnableFeignClients, with Feign.Client being default client implementation, so you need to build an provide your own Feign client bean, with any additional setup included. In addition to that, the FeignClientBuilder only allows you to set the values that would usually be passed as attributes of the @FeignClient annotation in the resulting bean.
Comment From: spring-cloud-issues
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.
Comment From: spring-cloud-issues
Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.