RobP
RobP

Reputation: 706

Spring Cloud: Feign and Http Connection Pooling

Can anyone please tell me if the Spring Cloud Feign Client provides or supports Http Connection Pooling, and if so how to configure settings like pool size? I can't seem to find this in the official documentation. Thank you.

Upvotes: 9

Views: 11101

Answers (2)

JohnJQC
JohnJQC

Reputation: 1

This is an example.

@Bean
public ServiceXFeignClient serviceXClient(Encoder encoder, Decoder decoder,
  Contract contract, ClientProperties properties, ProxyProperties proxyProperties) {

  OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder()
    .connectionPool(
      new ConnectionPool(properties.getPoolConnectionMaxIdle(),
      properties.getPoolConnectionKeepMinutesAlive(), TimeUnit.MINUTES))
    .build();

  return Feign.builder()
        .client(new feign.okhttp.OkHttpClient(okHttpClient))
    .encoder(encoder)
    .decoder(decoder)
    .contract(contract)
    .target(ServiceXFeignClient.class, properties.getUrl());
}

Upvotes: 0

RobP
RobP

Reputation: 706

From investigation I will try to answer my own question:

Spring Cloud Feign uses Netflix Feign. Netflix Feign in turn creates connections using java.net.HttpURLConnection which makes use of 'persistent connections' but not a connection pool.

It is possible to override the Client, for example using Apache HttpClient instead, and Netflix provide a library for this (feign-httpclient). When using this approach the connection pool size can be set using SystemProperties.

In Spring Cloud Brixton it seems that if Apache HttpClient or OkHttpClient are available (via @ConditionalOnClass) then they are automatically used.

Upvotes: 10

Related Questions