14 | OpenFeign 实战:OpenFeign 组件有哪些高级玩法?
- 深入了解
- 翻译
- 解释
- 总结
OpenFeign 实战:深入探讨 OpenFeign 组件的高级应用 本文深入介绍了 OpenFeign 组件的高级玩法,包括异常信息排查、超时判定和服务降级。作者首先介绍了如何利用 OpenFeign 的日志打印功能,轻松实现远程调用参数的日志打印,方便排查异常问题。此外,文章还详细介绍了 OpenFeign 的日志级别设置,包括四种不同的日志级别及其输出内容。另外,作者还介绍了如何在 OpenFeign 中配置超时判定条件,以及如何通过降级来处理服务异常,保障可用性,避免服务雪崩的发生。最后,作者提到了 OpenFeign 的服务降级处理,为读者提供了全面的 OpenFeign 高级玩法知识。 在超时判定方面,文章提到了多维度的超时判定,以及 OpenFeign + 网关层超时判定 + Sentinel 等判定的组合应用,有效防止服务雪崩。此外,对于服务降级的方案选型,作者分享了自己的见解,认为在项目中引入 Sentinel 需要考虑开发成本和维护成本,而 OpenFeign+Hystrix 的 Client 端降级方案可以满足简单降级需求,避免过度追求高大上方案。 总的来说,本文通过深入讲解 OpenFeign 的高级应用,为读者提供了丰富的实践经验和技术见解,对于开发大型微服务应用的开发人员具有一定的参考价值。
《Spring Cloud 微服务项目实战》,新⼈⾸单¥59
全部留言(20)
- 最新
- 精选
- gallifreyhystrix使用2.2.10.RELEASE的版本时,貌似需要在配置文件里面加上feign.circuitbreaker.enabled: true才行
作者回复: 是的,源码里带上了这行配置
2022-01-1216 - Avalon老师,如果 TemplateServiceFallback 实现了 TemplateService 接口,那使用注解注入 TemplateService 时,Spring 如何判断要注入的是这个实现类还是动态代理类?
作者回复: FeignClient注解里面有个玄机,决定了让框架注入哪个类。同学点进去这个注解的源代码,会发现一个神奇的boolean变量,好了我点到为止了哈,等同学自己摸索出来之后来分享下答案吧
2022-01-279 - alex_laiOpenfeign client 不是non block的?如果我的框架基于reactive 风格写的是不是没有必要introduce openfeign了,我可以自己写wrap加future在client side。社区未来会提供支持么?openfeign的业界地位是什么样的, nice to have?
作者回复: feign本质是spring mvc模式的封装,如果项目需要大量使用non blocking功能建议用webflux之类的方案。也有民间热心群众开源的ReactiveFeign版本可以作为一个选择
2022-01-137 - 被圣光照黑了我在coupon-customer-serv的启动类上加了@EnableHystrix,yml里加了feign:hystrix:enabled: true,coupon-template-serv里有个自定义异常,调用报错了怎么不触发熔断啊
作者回复: 在专栏里使用的这个spring cloud版本中已经不推荐使用hystrix作为熔断器了,hystrix依赖项已经从SC项目中全面剔除了,同学可以等后面介绍到sentinel的时候学习更强大的降级熔断组件。 这里介绍的feign降级是一个简化版的降级方案,配置文件里添加feign.circuitbreaker.enabled=true试试
2022-01-124 - kimoti好像是滑动窗口算法
作者回复: Bingo
2022-01-124 - Geek_0b93c0降级 放在客户端还是服务端好
作者回复: 各有利弊吧。比如Hystrix是client端降级,廉价好用省资源,只不过不能从全局视角做资源控制,只能在“单机”这个维度来做控制。Sentinel这种中心化的流控工具会增加部署成本和项目复杂度,但也提供了更加灵活+多维度的资源控制方式
2022-05-302 - 逝影落枫是先有熔断,才有降级吗?熔断条件如何配置?
作者回复: 熔断器的设置会在sentinel相关章节讲到,熔断是指在一段时间内,服务调用直接走降级逻辑
2022-01-122 - peter请教老师3个问题: Q1 容错时用Hystrix,是因为OpenFeign在基于Feign而Feign本来就能和Hystrix集成吗? 除了搭配Hystrix,OpenFeign能搭配Resilience4j吗? Q2 "06"篇中,思考题提到“3个模块分别部署到不同的集群上”,如果能分别部署,就不是单体应用了啊,而是像微服务了啊。单体应用就是难以分开部署,不是吗? Q3:微服务需要有“监控系统”,这个专栏会讲“监控系统”吗? 或者“02篇”中提到的某个组件充当了“监控系统”?(没有明确说它是监控系统,但具有此功能) Q4:本专栏会讲“持续集成”吗? 好像本专栏没有提这个方面。
作者回复: Q1:没错,完全可以搭配Resilience4j,后面还会介绍一个中心化容错组件sentinel Q2:06篇作为到微服务的过渡,我们设想这三个服务都变成了微服务之后,是如何发起调用的 Q3:后面会介绍Sentinel服务容错组件做限流+服务熔断,提供了一定的大盘监控能力。但这个不是专业的仪表监控系统,同学如果感兴趣的话可以了解下grafana,很多公司用这个监控k8s集群 Q4:CICD部分没有包含在专栏里面
2022-01-122 - 简我有点不明白,这个项目结构单独的把API给抽离出来了,如果说引入了第三方的API JAR包后,为什么不能直接使用这个API呢?这个引入的第三方API和我们实现的 @FeignClients 接口几乎一模一样,能利用起来吗?
作者回复: 单独把API抽离出来的目的是减少包污染,也是大部分RPC框架推荐的一种方式。 第三方API jar也是单独抽离出来的一个maven依赖项,和我们剥离API子模块供给其他业务方使用是一个道理
2022-04-121 - DY可能是 openfeign 版本的问题, 我用下面配置验证超时不生效 feign: client: config: # 全局超时配置 default: # 网络连接阶段1秒超时 connectTimeout: 1000 # 服务请求响应阶段5秒超时 readTimeout: 5000 # 针对某个特定服务的超时配置 coupon-template-serv: connectTimeout: 1000 readTimeout: 2000 但是换种方式就可以生效: spring: cloud: openfeign: client: config: default: connect-timeout: 8000 read-timeout: 8000 coupon-template-serv: connect-timeout: 1000 read-timeout: 2000 springcloud 用的版本是 2022.0.0, 对应的 spring-cloud-starter-openfeign 的版本是 4.0.0
作者回复: 是的后面升版了之后配置文件会有变化,springcloud大版本之间的配置项变动挺多的
2023-12-22归属地:北京