Как определить, какой http-клиент по умолчанию был внедрен контейнером Spring для @FeignClient? - PullRequest
0 голосов
/ 01 октября 2018

Я использую аннотацию @FeignClient.Я хочу знать, какой httpclient был внедрен Spring при запуске моего приложения.

Например, можно использовать клиентские приложения OkHttpClient и ApacheHttpClient, установив для feign.okhttp.enabled или feign.httpclient.enabled значение true.соответственно и наличие их в пути к классам.

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "service", path = "/api/v1", configuration = ServiceConfiguration.class)
public interface ServiceClient {

    @RequestMapping(method = RequestMethod.GET, value = "/test/{param1}", consumes = MediaType.APPLICATION_JSON_VALUE)
    String test(@PathVariable("param1") String param);
}

Я не уверен, какой именно из этих клиентов внедряется, поскольку мое приложение является сложным с несколькими библиотеками httpclient в пути к классам.

Есть ли способ, которым я могу контролировать это?

Я включил JMX и попытался просмотреть Mconans jconsole, и не было никакой информации о httpclients.

Ответы [ 2 ]

0 голосов
/ 19 августа 2019

Согласно предыдущему ответу, теперь я вижу эту строку в FeignAutoConfiguration.java

@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)

Так что простым ответом будет Apache Client по умолчанию, если вы не добавите какие-либо свойства

0 голосов
/ 01 октября 2018

Невозможно определить, не увидев настройки Spring, особенно если ваше приложение сложное, как вы сказали.

Поскольку вы используете аннотации Spring для объявления @FeignClient, вы, скорее всего, зависите от spring-cloud-netflix-core.Если вы включаете значения по умолчанию с @EnableFeignClients, взгляните на FeignAutoConfiguration class.Этот класс регистрирует фактический компонент клиента HTTP.Если вы добавите оба свойства feign.httpclient.enabled и feign.okhttp.enabled (что для IMO является странной настройкой), попробуйте отладку FeignAutoConfiguration, чтобы увидеть, какой компонент Client feignClient() будет зарегистрирован в контексте Spring.

В качестве альтернативы включите ведение журнала проводов.во всех клиентских библиотеках HTTP и посмотрите, какая из них фактически выполняет запрос на основе журналов.

...