Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15862 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

14 | OpenFeign 实战:OpenFeign 组件有哪些高级玩法?

你好,我是姚秋辰。
在上一讲中,我们已经将 OpenFeign 组件集成到了实战项目中。今天我们来进一步深入 OpenFeign 的功能特性,学习几个 OpenFeign 的进阶使用技巧:异常信息排查、超时判定和服务降级。
异常信息排查是我们开发人员每天都要面对的事情。如果你正在开发一个大型微服务应用,你经常需要集成一些由其他团队开发的 API,这就免不了要参与各种联调和问题排查。如果你是一个经验丰富的老码农,那你一定经常说这样一句话:“你的 Request 参数是什么?”这句台词在我们平时的 API 联调和线上异常排查中出镜率很高,因为服务请求的入参和出参是分析和排查问题的重要线索
为了获得服务请求的参数和返回值,我们经常使用的一个做法就是打印日志。你可以在程序中使用 log.info 或者 log.debug 方法将服务请求的入参和返回值一一打印出来。但是,对一些复杂的业务场景来说就没有那么轻松了。
假如你在开发的是一个下单服务,执行一次下单流程前前后后要调用十多个微服务。你需要在请求发送的前后分别打印 Request 和 Response,不仅麻烦不说,我们还未必能把包括 Header 在内的完整请求信息打印出来。
那我们如何才能引入一个既简单又不需要硬编码的日志打印功能,让它自动打印所有远程方法的 Request 和 Response,方便我们做异常信息排查呢?接下来,我就来给你介绍一个 OpenFeign 的小功能,轻松实现远程调用参数的日志打印
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

OpenFeign 实战:深入探讨 OpenFeign 组件的高级应用 本文深入介绍了 OpenFeign 组件的高级玩法,包括异常信息排查、超时判定和服务降级。作者首先介绍了如何利用 OpenFeign 的日志打印功能,轻松实现远程调用参数的日志打印,方便排查异常问题。此外,文章还详细介绍了 OpenFeign 的日志级别设置,包括四种不同的日志级别及其输出内容。另外,作者还介绍了如何在 OpenFeign 中配置超时判定条件,以及如何通过降级来处理服务异常,保障可用性,避免服务雪崩的发生。最后,作者提到了 OpenFeign 的服务降级处理,为读者提供了全面的 OpenFeign 高级玩法知识。 在超时判定方面,文章提到了多维度的超时判定,以及 OpenFeign + 网关层超时判定 + Sentinel 等判定的组合应用,有效防止服务雪崩。此外,对于服务降级的方案选型,作者分享了自己的见解,认为在项目中引入 Sentinel 需要考虑开发成本和维护成本,而 OpenFeign+Hystrix 的 Client 端降级方案可以满足简单降级需求,避免过度追求高大上方案。 总的来说,本文通过深入讲解 OpenFeign 的高级应用,为读者提供了丰富的实践经验和技术见解,对于开发大型微服务应用的开发人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • gallifrey
    hystrix使用2.2.10.RELEASE的版本时,貌似需要在配置文件里面加上feign.circuitbreaker.enabled: true才行

    作者回复: 是的,源码里带上了这行配置

    2022-01-12
    16
  • Avalon
    老师,如果 TemplateServiceFallback 实现了 TemplateService 接口,那使用注解注入 TemplateService 时,Spring 如何判断要注入的是这个实现类还是动态代理类?

    作者回复: FeignClient注解里面有个玄机,决定了让框架注入哪个类。同学点进去这个注解的源代码,会发现一个神奇的boolean变量,好了我点到为止了哈,等同学自己摸索出来之后来分享下答案吧

    2022-01-27
    9
  • alex_lai
    Openfeign client 不是non block的?如果我的框架基于reactive 风格写的是不是没有必要introduce openfeign了,我可以自己写wrap加future在client side。社区未来会提供支持么?openfeign的业界地位是什么样的, nice to have?

    作者回复: feign本质是spring mvc模式的封装,如果项目需要大量使用non blocking功能建议用webflux之类的方案。也有民间热心群众开源的ReactiveFeign版本可以作为一个选择

    2022-01-13
    7
  • 被圣光照黑了
    我在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-12
    4
  • kimoti
    好像是滑动窗口算法

    作者回复: Bingo

    2022-01-12
    4
  • Geek_0b93c0
    降级 放在客户端还是服务端好

    作者回复: 各有利弊吧。比如Hystrix是client端降级,廉价好用省资源,只不过不能从全局视角做资源控制,只能在“单机”这个维度来做控制。Sentinel这种中心化的流控工具会增加部署成本和项目复杂度,但也提供了更加灵活+多维度的资源控制方式

    2022-05-30
    2
  • 逝影落枫
    是先有熔断,才有降级吗?熔断条件如何配置?

    作者回复: 熔断器的设置会在sentinel相关章节讲到,熔断是指在一段时间内,服务调用直接走降级逻辑

    2022-01-12
    2
  • 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-12
    2
  • 我有点不明白,这个项目结构单独的把API给抽离出来了,如果说引入了第三方的API JAR包后,为什么不能直接使用这个API呢?这个引入的第三方API和我们实现的 @FeignClients 接口几乎一模一样,能利用起来吗?

    作者回复: 单独把API抽离出来的目的是减少包污染,也是大部分RPC框架推荐的一种方式。 第三方API jar也是单独抽离出来的一个maven依赖项,和我们剥离API子模块供给其他业务方使用是一个道理

    2022-04-12
    1
  • 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归属地:北京
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部