当前位置:首页 > 技术文章 > 正文内容

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的常见问题及排查思路?

答:服务找不到:检查服务名、注册中心、负载均衡配置。超时/重试失败:检查超时和重试参数。请求头丢失:检查拦截器和注解使用。

相关文章

最美 Linux 发行版之争还在继续,Elementary OS 0.3 发布 0.3 Freya 更新

对于个人终端消费者而言,Linux 发行版们依然希望通过 UI 革新来吸引他们的注意。除了 Ubuntu 这样综合能力强的选手,偏重界面的发行版里,前有 OpenSUSE,后有 Linux Mint,...

Ubuntu 24.10发行版登场:Linux 6.11内核、GNOME 47桌面环境

IT之家 10 月 11 日消息,Canonical 昨日发布新闻稿,正式推出代号为 Oracular Oriole 的 Ubuntu 24.10 发行版。新版在内核方面升级到最新 6.11 版本,并...

Vue3开发极简入门(16):祖孙组件间通信之provide&amp;inject

前文说了Vue的组件间关系,有父子、爷孙、其他关系。例如之前的Father、Son是父子关系,App与Son就是爷孙关系。而props的Son,与emits的Son,就是其他关系。前文的props是父...

学习ES6- 入门Vue(大量源代码及笔记,带你起飞)

ES6学习网站: https://es6.ruanyifeng.com/箭头函数普通函数//普通函数 this 指向调用时所在的对象(可变) let fn = function fn(a, b) {...

10分钟搞定gitlab-ci自动化部署(gitlab ci 配置)

gitlab-ci 是持续集成工具/自动化部署工具,类似 jenkins。持续集成 是将代码集成到共享存储库并尽可能早地自动构建/测试每个更改的实践 - 通常一天几次。概述在编码完成时都会进行打包发布...

Python 实现 | 通过 Gitlab API 获取项目工程、分支、commit 提交记录

前提在 gitlab 中你的工程创建 Access Token然后你会得到一个 21 位 access token,代码中需要用到。代码''' 说明: 1.登录gitlab的r...