Spring Cloud: Feign и пул соединений Http

Может ли кто-нибудь сказать мне, предоставляет ли клиент Spring Cloud Feign или поддерживает пул соединений Http, и если да, то как настроить такие параметры, как размер пула? Кажется, я не могу найти это в официальной документации. Спасибо.


person RobP    schedule 22.03.2016    source источник


Ответы (2)


Из расследования я попытаюсь ответить на свой вопрос:

Spring Cloud Feign использует Netflix Feign. Netflix Feign, в свою очередь, создает соединения, используя java.net.HttpURLConnection, который использует «постоянные соединения», но не пул соединений.

Клиент можно переопределить, например, используя вместо этого Apache HttpClient, и Netflix предоставляет для этого библиотеку (feign-httpclient). При использовании этого подхода размер пула соединений можно задать с помощью SystemProperties.

В Spring Cloud Brixton кажется, что если доступны Apache HttpClient или OkHttpClient (через @ConditionalOnClass), то они автоматически используются.

person RobP    schedule 31.03.2016
comment
Вы уверены, что Spring Cloud будет автоматически использовать Apache HttpClient, когда он находится в пути к классам? - person Neo; 07.08.2016
comment
Вам нужно добавить io.github.openfeign:feign-httpclient, а не просто http-клиент apache - person Vladislav Kysliy; 04.12.2018

Это пример.

@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());
}

person SirJota    schedule 23.10.2020