版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Feign面试题及详细答案(实战完整版)一、基础认知类1、什么是Feign?它的核心作用是什么?Feign是SpringCloud体系中一款声明式、模板化的HTTP客户端,专门用于微服务之间的远程调用。核心作用就是简化微服务调用:传统服务间调用需要手动拼接URL、拼接请求参数、通过RestTemplate发起请求、解析响应结果,代码冗余且重复度高。而Feign只需要定义一个接口,通过注解绑定远程服务接口,就能像调用本地方法一样调用远程微服务,彻底屏蔽HTTP请求细节,让远程调用更简洁、更规范。2、Feign和RestTemplate有什么区别?实际开发中怎么选择?核心区别:调用方式不同:RestTemplate是编程式调用,需要手动写请求地址、请求方式、参数封装,代码量大;Feign是声明式调用,基于接口注解,直接方法调用,简洁优雅。维护性不同:RestTemplate接口地址、参数硬编码在业务代码中,后期接口变更需要多处修改;Feign将远程接口统一封装在独立接口中,统一维护,修改只需要改一处。功能支持不同:Feign原生支持负载均衡、日志打印、请求拦截、容错降级;RestTemplate需要手动整合Ribbon、熔断组件才能实现对应能力。选型原则:微服务项目中优先使用Feign;只有简单的第三方HTTP接口调用、临时单次调用的场景,会使用RestTemplate。3、Feign的核心优势和缺点分别是什么?优势:代码极简,声明式编程,贴近本地方法调用,学习和使用成本极低;原生集成Ribbon负载均衡,无需手动配置,自动实现服务集群调用;高度可扩展,支持自定义拦截器、编码器、解码器、日志级别;适配SpringMVC注解,开发者无需学习新的注解体系,上手快。缺点:底层基于HTTP协议,相比Dubbo的RPC调用,性能略低,吞吐量稍差;默认不支持熔断降级,需要手动整合Sentinel、Hystrix;参数绑定、注解使用不规范时,容易出现隐式报错,排查问题需要一定经验。二、原理源码类(高频面试)4、Feign的核心工作原理是什么?整体执行流程?Feign的核心是基于JDK动态代理生成代理对象,实现无感知远程调用,整体流程分为5步:启动扫描:项目启动时,@EnableFeignClients注解开启Feign功能,Spring扫描所有带@FeignClient注解的接口;动态代理:通过JDK动态代理,为每个Feign接口生成代理实现类;请求封装:调用接口方法时,代理类拦截请求,根据注解(@GetMapping、@RequestParam等)自动拼接URL、请求头、请求参数;负载均衡调用:结合Ribbon从注册中心获取服务实例列表,按照负载均衡规则选中一个服务实例,发起HTTP请求;结果解析返回:接收远程服务响应,通过解码器解析为对应返回实体,返回给业务层。5、@EnableFeignClients和@FeignClient各自作用是什么?@EnableFeignClients:加在启动类上,是Feign的开启开关。核心作用是启动时扫描指定包下所有Feign接口,自动创建代理对象并注入Spring容器,让项目具备Feign远程调用能力。可以指定basePackages限定扫描范围,提升启动效率。@FeignClient:加在远程调用接口上,用于定义远程服务信息。核心属性:name(服务注册名称,必填)、url(手动指定服务地址,测试环境常用)、fallback(降级实现类)、path(服务统一前缀)。6、Feign底层默认使用的是什么HTTP客户端?如何替换优化?SpringCloud早期版本中,Feign默认原生使用JDK自带的URLConnection,没有连接池,每次调用都会新建连接、销毁连接,高频调用场景下性能较差。优化替换方案:可以手动替换为ApacheHttpClient或OkHttp,配置连接池,提升并发调用性能。核心步骤:引入对应依赖、开启连接池配置、在配置文件中指定Feign的客户端类型。生产环境基本都会替换默认客户端,避免高频调用性能瓶颈。三、配置与实战问题类7、Feign的日志级别有几种?生产环境一般用哪个?Feign内置四种日志级别,用于打印远程调用的请求和响应日志:NONE:默认级别,不打印任何日志,性能最高;BASIC:只打印请求方式、请求地址、响应状态码、耗时;HEADERS:在BASIC基础上,增加打印请求头、响应头;FULL:打印完整日志,包含请求头、请求体、响应头、响应体、详细参数,日志最全面。环境选型:开发、测试环境用FULL,方便排查接口参数问题;生产环境统一用BASIC,避免日志过多占用磁盘和性能,禁止使用FULL。8、Feign调用超时怎么解决?超时配置有哪两种?Feign的超时分为连接超时和读取超时,默认超时时间较短,业务接口处理慢时极易报错,需要手动调整配置。有两套配置方式:Feign原生超时配置:针对所有Feign调用生效,优先级最低;Ribbon超时配置:因为Feign依赖Ribbon发起调用,Ribbon超时配置优先级更高,会覆盖Feign原生配置,生产中基本使用Ribbon配置超时。日常开发中,接口查询大数据、批量处理场景,需要适当调大读取超时时间,避免不必要的超时报错。9、Feign调用传递Header请求头(Token、Cookie)怎么处理?默认情况下,Feign远程调用不会携带原有请求的Header信息,这也是微服务Token鉴权调用失败的常见原因。主流解决方案:自定义Feign请求拦截器,实现RequestInterceptor接口。在拦截器中获取当前线程的Request请求,解析Header中的Token、Cookie等参数,手动封装到Feign的请求头中,实现每次远程调用自动携带鉴权信息。该方案全局生效,无需每个接口单独处理,是企业级项目的标准做法。10、Feign传递复杂参数、实体类、List集合有哪些坑?Feign参数绑定非常严格,注解使用错误会直接调用失败,常见坑点:GET请求不能直接传实体类:GET请求参数会拼接在URL后,直接传实体会报错,必须用@RequestParam逐个绑定参数,或者使用@SpringQueryMap注解接收实体参数;POST传实体必须加@RequestBody:不加注解会导致参数接收为空;传递List、数组参数:GET方式需要使用@RequestParam,且必须指定参数名,否则参数绑定失败;参数别名问题:如果参数名和实体字段不一致,必须通过注解指定映射关系,否则接收不到值。四、容错、降级与异常类11、Feign如何实现熔断降级?常用方案是什么?原生Feign没有熔断降级能力,需要整合熔断组件实现,目前企业主流两种方案:整合Hystrix:早期SpringCloud主流方案,通过@FeignClient的fallback属性指定降级实现类,接口调用超时、报错、服务不可用时,自动执行降级方法,返回兜底数据;整合Sentinel:目前主流推荐方案,轻量、配置简单、支持流量控制、熔断降级、系统限流,适配性更好,国内微服务项目基本全面使用Sentinel替代Hystrix。核心作用:避免服务雪崩,某个下游服务宕机或超时,不会导致上游服务线程阻塞、资源耗尽,保障服务稳定性。12、Feignfallback和fallbackFactory的区别?fallback:只提供降级兜底方法,无法捕获具体的异常信息,适合简单降级场景,只需要返回默认兜底数据,不需要排查异常原因;fallbackFactory:可以捕获远程调用的具体异常、异常信息、报错原因,能针对不同异常做差异化降级处理,便于日志记录和问题排查,生产环境优先使用。13、Feign调用出现404、500报错,常见原因有哪些?404找不到接口常见原因:Feign接口路径、请求方式(GET/POST)和下游服务接口不匹配;@FeignClient的path服务前缀配置错误;服务注册名称写错,调用到错误服务;参数注解使用错误,导致URL拼接异常。500服务异常常见原因:下游服务代码报错、空指针、数据库异常;参数传递格式错误,下游解析失败;超时时间过短,接口未执行完成就被中断;请求头缺失鉴权信息,下游拦截器拦截报错。五、进阶优化与面试压轴题14、Feign和Dubbo的核心区别?微服务中如何选型?核心区别:协议不同:Feign基于HTTP协议,属于应用层协议,通用性强;Dubbo基于自定义TCP协议,传输效率更高;性能不同:Dubbo采用长连接、二进制传输,吞吐量、响应速度远高于Feign;Feign基于HTTP短连接(默认),性能偏弱;使用场景不同:Feign适配SpringCloud全家桶,开箱即用,适合快速开发、跨语言调用;Dubbo侧重高性能服务治理,适合高并发、高吞吐的核心业务;服务治理:Dubbo原生具备完善的负载均衡、熔断、限流、权重配置;Feign需要依赖第三方组件实现。选型:普通业务微服务、对外接口、快速迭代项目用Feign;核心交易、高并发、高性能场景优先Dubbo。15、生产环境Feign做过哪些优化?(面试高频压轴)实际项目中,针对Feign的性能、稳定性、排查效率,主要做以下优化:替换HTTP客户端:摒弃默认的URLConnection,替换为HttpClient并配置连接池,减少频繁创建销毁连接的开销,提升并发性能;合理配置超时时间:根据业务场景调整Ribbon连接超时、读取超时参数,避免接口处理慢导致的无效报错;开启熔断降级:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版四年级数学下《歌手大赛》公开课及习题教案资料
- 生产成本控制技巧培训课件
- Unit 6 Earth first Using language-Grammar 教案-2021-2022学年高中英语新外研版必修第二册
- 海明园艺39种花卉种植指南
- 医学分析-多元化宣教在单侧肩袖损伤修补术患者围手术期中的应用效果观察
- 2026年老年照护康复治疗设备与操作课件
- 2026年江苏省人教版八年级化学上册第10章物质的变化课件
- 关于汽车的实习报告模板(3篇)
- 《田忌赛马问题》课件
- 数据结构第一部分
- 塑料模具开模合同协议书
- GJB2744A-2019钛及钛合金自由锻件和模锻件规范
- 线损管理培训
- 骨科手术配合要点
- 厨房维修合同(2024版)
- 报表模板-土地增值税清算税款鉴证套表
- 2022年版初中历史课程标准新课标考试题库及答案1
- (高清版)TDT 1056-2019 县级国土资源调查生产成本定额
- 港珠澳海底隧道
- 闭合导线观测记录及平差计算表(四边形)
- GB/T 678-2023化学试剂乙醇(无水乙醇)
评论
0/150
提交评论