Spring Cloud OpenFeign HTTP客户端排查切换及New Relic追踪问题
问题解答:OpenFeign与New Relic链路追踪适配
1. OpenFeign是Web客户端还是依赖Web客户端的库?
OpenFeign不是Web客户端,它是一个声明式HTTP客户端框架,仅负责请求接口定义、注解解析、编解码等上层逻辑,实际发送HTTP请求的工作完全依赖底层的具体Web客户端实现(比如OkHttp、Apache HttpClient、Java原生HttpURLConnection等)。
2. 如何查看当前使用的Web客户端?
有几种实用方式可以确认:
- 查看依赖树:
执行Maven命令:
或Gradle命令:mvn dependency:tree
在输出中查找./gradlew dependenciesfeign-开头的依赖,比如feign-okhttp、feign-hc(对应Apache HttpClient);如果没有这类特定客户端依赖,默认会使用Java原生的HttpURLConnection。 - 打印Bean类型:
在Spring配置类或启动类中注入Feign的ClientBean并打印类名:
启动应用后即可在控制台看到具体的客户端实现类。@Autowired private Client feignClient; @PostConstruct public void printFeignClientType() { System.out.println("当前Feign使用的Web客户端:" + feignClient.getClass().getName()); } - 查看Feign日志:
在application.properties中开启Feign的DEBUG日志:
发起请求后,日志中会显示客户端相关信息,比如原生HttpURLConnection会出现logging.level.your.feign.interface.package=DEBUGsun.net.www.protocol.http.HttpURLConnection相关日志。
3. 如何切换Web客户端?
结合你提供的New Relic支持列表,推荐切换到OkHttp或Apache HttpClient,以下是适配你Java 8 + Spring Boot 2.0.3 + Spring Cloud OpenFeign 2.0.0环境的配置步骤:
切换到OkHttp(推荐,符合New Relic 3.6.0+版本要求)
- 添加依赖到
pom.xml:<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-okhttp</artifactId> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.14.9</version> <!-- 适配Java8和Spring Boot2.0的稳定版本 --> </dependency> - 启用OkHttp:
在application.properties中添加配置:
或自定义配置类创建OkHttp Bean:feign.okhttp.enabled=true@Configuration public class FeignOkHttpConfig { @Bean public OkHttpClient okHttpClient() { return new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .build(); } @Bean public Client feignClient(OkHttpClient okHttpClient) { return new feign.okhttp.OkHttpClient(okHttpClient); } }
切换到Apache HttpClient 4.x
- 添加依赖到
pom.xml:<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-hc</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> <!-- New Relic支持的稳定版本 --> </dependency> - 启用Apache HttpClient:
在application.properties中添加:feign.httpclient.enabled=true
切换完成后重启应用,New Relic Java Agent即可识别对应的Web客户端,将Feign调用纳入链路追踪。
内容的提问来源于stack exchange,提问作者John Little
相关产品推荐
相关产品推荐

