Default http client (Client.Default) seems not taking 'spring.cloud.openfeign.httpclient' properties when creating feign client with FeignClientBuilder
Siegolas opened this issue · 4 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 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.
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.
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.
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.