如何判断Spring容器为@FeignClient注入了哪个默认的http客户端?

问题描述 投票:0回答:3

我正在使用@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 Mbean,但没有有关 httpclients 的信息。

spring-boot spring-cloud-netflix netflix-feign spring-cloud-feign
3个回答
0
投票

如果不查看 Spring 设置,就无法判断,特别是如果您的应用程序像您所说的那样复杂。

由于您使用 Spring 注释来声明您的

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

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


0
投票

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

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

如果你不添加任何属性,那么简单的答案就是默认的 Apache Client


0
投票

您可以在 feign.Client#execute 中添加断点并调试您的程序

© www.soinside.com 2019 - 2024. All rights reserved.