SpringCloud专题 - Feign最新高频面试题总结
1. Feign的作用是什么?
答:
Feign是SpringCloud中的声明式HTTP客户端,简化了服务间的RESTful调用,支持负载均衡、熔断、拦截器等功能。
2. Feign的工作原理?
答:通过注解(@FeignClient)定义接口,Feign在运行时为接口生成代理对象。代理对象根据方法注解自动拼接HTTP请求,发起远程调用。支持与Ribbon、Eureka、Sentinel等集成,实现服务发现、负载均衡和熔断。
3. Feign与RestTemplate的区别?
答:Feign是声明式,接口+注解,代码简洁,易维护。RestTemplate是命令式,需手动拼接URL和参数,代码量大。Feign天然集成Ribbon、Sentinel等,RestTemplate需手动配置。
4. Feign如何实现负载均衡?
答:Feign默认集成Ribbon(Spring Cloud 2020后为LoadBalancer),通过服务名自动选择可用实例,实现客户端负载均衡。
5. Feign如何实现熔断降级?
答:可与Hystrix、Sentinel等熔断组件集成。通过fallback属性指定降级处理类,实现服务降级。
6. Feign的超时与重试机制如何配置?
答:超时通过
feign.client.config.default.connectTimeout、readTimeout等参数配置。重试通过feign.retryer配置,支持自定义Retryer。
7. Feign如何传递请求头、Token等信息?
答:通过@RequestHeader注解在方法参数中传递。也可实现RequestInterceptor接口,全局拦截和修改请求。
8. Feign如何支持文件上传和下载?
答:上传:方法参数使用@RequestPart或MultipartFile,并设置consumes = "multipart/form-data"。下载:返回值类型为Response或byte[],处理流式数据。
9. Feign的日志如何配置和使用?
答:通过配置logging.level.<Feign接口全类名>=DEBUG开启日志。可自定义Logger实现,记录请求和响应详情。
10. Feign的自定义错误处理如何实现?
答:实现ErrorDecoder接口,自定义异常处理逻辑。
11. Feign的请求压缩和连接池如何配置?
答:请求压缩通过
feign.compression.request.enabled=true等参数开启。连接池通过自定义OkHttpClient或HttpClient实现。
12. Feign与SpringCloud Gateway、RestTemplate的关系?
答:Feign适合服务间调用,Gateway适合API聚合和统一入口,RestTemplate适合简单HTTP调用。三者可根据业务场景灵活选用。
13. Feign的常见问题及排查思路?
答:服务找不到:检查服务名、注册中心、负载均衡配置。超时/重试失败:检查超时和重试参数。请求头丢失:检查拦截器和注解使用。