如何确定Spring容器为@FeignClient注入了哪个默认的HTTP客户端?

时间:2018-10-01 16:02:35

标签: spring-boot spring-cloud-netflix netflix-feign spring-cloud-feign

我正在使用@FeignClient注释。我想知道当我运行我的应用程序时,Spring注入了哪个httpclient。

例如, 通过将feign.okhttp.enabled或feign.httpclient.enabled分别设置为true并将它们放在类路径中,可以使用OkHttpClient和ApacheHttpClient feign客户端。

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,并尝试查看jconsole Mbeans,但是没有有关httpclients的信息。

2 个答案:

答案 0 :(得分:0)

在没有看到Spring设置的情况下很难分辨,尤其是如果您的应用程序像您所说的那样复杂时。

由于您使用的是Spring注释来声明@FeignClient,因此您最有可能依赖于spring-cloud-netflix-core。如果您要通过@EnableFeignClients启用默认设置,请查看FeignAutoConfiguration类。此类注册实际的HTTP客户端bean。如果同时添加了feign.httpclient.enabledfeign.okhttp.enabled属性(IMO是一个奇怪的设置),请尝试调试FeignAutoConfiguration以查看哪个Client feignClient() bean将在Spring上下文中注册。

或者在所有HTTP客户端库中启用有线日志记录,并根据日志查看哪个库实际上执行了请求。

答案 1 :(得分:0)

根据先前的答案,现在我在FeignAutoConfiguration.java中看到这一行

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

如果您不添加任何属性,那么默认情况下,Apache Client默认就是一个简单的答案