文章目录

  • OpenFeign可配置事项
    • 日志配置
    • 异常解码器
    • 拦截器
    • 更改 OpenFeign 默认的负载均衡策略
    • 开启默认的 OpenFeign 数据压缩功能
    • 替换默认通信组件

OpenFeign可配置事项

日志配置

当 API 调用失败后,需要有详细的请求信息来分析失败原因,我们可以设置 Feign 的日志级别来输出详细的请求信息,Feign 的日志级别有四种:

  • NONE 表示不输出日志。
  • BASIC 表示只输出请求方法的 URL 和响应的状态码以及执行的时间。
  • HEADERS 将 BASIC 信息和请求头信息输出。
  • FULL 会输出全部完整的请求信息。

了解了日志级别后,我们就可以为 Feign Client 设置不同的级别了,级别不同输出的请求信息的详细程度也不一样,后面的课时我会介绍动态的去调整日志级别,这样在平时是不输出日志的,一旦需要排查问题的时候就可以动态的将日志打开,非常方便。

异常解码器


Feign 中提供了异常的解码器,但我们也可以自定义异常解码器,自定义异常解码器可以用于内部服务之间调用的异常传递。比如说 A 服务调用 B 服务,B 服务中出现异常后,会由 B 服务中的全局异常处理器进行处理,然后返回给 A 服务的数据格式是固定的 code 是多少,message 是什么。

拦截器


Feign 中提供了拦截器机制,我们可以添加自己的拦截器来实现某些场景下的需求。BasicAuth 在 Feign 中默认提供了拦截器,我们只需要配置一下就可以使用,如果我们需要自定义拦截器,可以参考 BasicAuth 的代码,只要实现 RequestInterceptor 接口,在 apply 方法中编写你自己的逻辑就可以了,通过 RequestTemplate 可以进行很多操作,比如添加指定的请求头信息,这个可以用在服务间传递某些信息的时候。

更改 OpenFeign 默认的负载均衡策略

前面提到,在 OpenFeign 使用时默认引用 Ribbon 实现客户端负载均衡。那如何设置 Ribbon 默认的负载均衡策略呢?在 OpenFeign 环境下,配置方式其实与之前 Ribbon+RestTemplate 方案完全相同,只需在 application.yml 中调整微服务通信时使用的负载均衡类即可。

warehouse-service: #服务提供者的微服务ID ribbon: #设置对应的负载均衡类 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

开启默认的 OpenFeign 数据压缩功能

在 OpenFeign 中,默认并没有开启数据压缩功能。但如果你在服务间单次传递数据超过 1K 字节,强烈推荐开启数据压缩功能。默认 OpenFeign 使用 Gzip 方式压缩数据,对于大文本通常压缩后尺寸只相当于原始数据的 10%~30%,这会极大提高带宽利用率。但有一种情况除外,如果应用属于计算密集型,CPU 负载长期超过 70%,因数据压缩、解压缩都需要 CPU 运算,开启数据压缩功能反而会给 CPU 增加额外负担,导致系统性能降低,这是不可取的。

feign: compression: request: # 开启请求数据的压缩功能 enabled: true # 压缩支持的MIME类型 mime-types: text/xml,application/xml, application/json # 数据压缩下限 1024表示传输数据大于1024 才会进行数据压缩(最小压缩值标准) min-request-size: 1024 # 开启响应数据的压缩功能 response: enabled: true

替换默认通信组件

OpenFeign 默认使用 Java 自带的 URLConnection 对象创建 HTTP 请求,但接入生产时,如果能将底层通信组件更换为 Apache HttpClient、OKHttp 这样的专用通信组件,基于这些组件自带的连接池,可以更好地对 HTTP 连接对象进行重用与管理。作为 OpenFeign 目前默认支持 Apache HttpClient 与 OKHttp 两款产品。我以OKHttp配置方式为例,为你展现配置方法。
1.引入 feign-okhttp 依赖包。

<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-okhttp</artifactId> <version>11.0</version>
</dependency>

2.在应用入口,利用 Java Config 形式初始化 OkHttpClient 对象。

@SpringBootApplication
@EnableFeignClients
public class OrderServiceApplication { //Spring IOC容器初始化时构建okHttpClient对象 @Bean public okhttp3.OkHttpClient okHttpClient(){ return new okhttp3.OkHttpClient.Builder() //读取超时时间 .readTimeout(10, TimeUnit.SECONDS) //连接超时时间 .connectTimeout(10, TimeUnit.SECONDS) //写超时时间 .writeTimeout(10, TimeUnit.SECONDS) //设置连接池 .connectionPool(new ConnectionPool()) .build(); } public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class, args); }
}

3.在 application.yml 中启用 OkHttp。

feign: okhttp: enabled: true

做到这里,我们已将OpenFeign的默认通信对象从URLConnection调整为OKHttp,至于替换为HttpClient组件的配置思路是基本相同的。

本文内容到此结束了,
如有收获欢迎点赞

【云原生】SpringCloud系列之服务调用OpenFeign(日志配置、异常解码器、更改负载均衡策略、替换默认通信组件等)相关推荐

  1. SpringCloud Ribbon中的7种负载均衡策略!

    作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而 ...

  2. dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...

    面试官心理分析 继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理. 说白了,就 ...

  3. SpringCloud Ribbon(二)之自定义负载均衡策略IRule

    一.Ribbon负载均衡策略 一个服务对应一个LoadBalancer,一个LoadBalancer只有一个Rule,LoadBalancer记录服务的注册地址,Rule提供从服务的注册地址中找出一个 ...

  4. 云原生技术系列:Service Mesh(服务网格)

    导言: 在复杂业务的后端服务开发中,拆分出的微服务往往是数十个.上百个,即使用上了容器技术方便了其打包部署,使用了 Kubernetes 进行便捷的容器编排管理,但众多微服务之间往往涉及到复杂的业务通 ...

  5. 云原生存储系列文章(一):云原生应用的基石

    作者| 郡宝 阿里云技术专家 参与文末留言互动,即有机会获得赠书福利! 导读:存储服务支撑了应用的状态.数据的持久化,是计算机系统中的重要组成部分,也是所有应用得以运行的基础,其重要性不言而喻.在存储 ...

  6. 【云原生 | Kubernetes 系列】---Skywalking部署和监控

    [云原生 | Kubernetes 系列]-Skywalking部署和监控 1. 分布式链路追踪概念 在较大的web集群和微服务环境中,客户端的一次请求可能需要经过多个不同的模块,多个不同中间件,多个 ...

  7. 【云原生微服务八】Ribbon负载均衡策略之WeightedResponseTimeRule源码剖析(响应时间加权)

    文章目录 一.前言 二.WeightedResponseTimeRule 1.计算权重? 1)如何更新权重? 2)如何计算权重? 3)例证权重的计算 2.权重的使用 1)权重区间问题? 一.前言 前置 ...

  8. 云原生时代,微服务如何演进?

    简介:云原生时代,微服务和云原生会产生怎样的关系?云原生时代的微服务又有什么特点?当前有哪些比较活跃的微服务项目?阿里巴巴资深技术专家李响从微服务的生命周期.流量治理.编程模型以及可信安全4个方面,分 ...

  9. Service Mesh 如何重定义云原生计算?阿里服务网格技术大揭秘

    受访者 | 王夕宁 记者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 如今微服务已成为构建现代云应用的主导模式,它围绕着特定的业务功能,将单个组件分解为独立的服务.但随之而来产生另外的问 ...

  10. AI TALK | 云原生时代的微服务架构与关键技术

    随着云原生与微服务技术的逐步发展,业界也逐步构建出一整套比较完整的微服务技术体系. 面向云原生时代,微服务架构是从业人员绕不开的一个话题,腾讯云AI&腾讯优图的内容风控安全审核能力也与微服务技 ...

最新文章

  1. ***WindowsXP常用的七种方法
  2. 第十六届智能车竞赛线上全国总决赛远程组委会监督腾讯会议
  3. 基于SmartQQ协议的QQ聊天机器人-7
  4. HTML最常用的字符实体
  5. 【数据竞赛】“达观杯”文本智能处理挑战赛1
  6. 如何打开设计思路,避免不断改稿?只需提前做好这一步
  7. POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~
  8. (转)矩阵快速幂模板
  9. 除了游戏和医疗,腾讯区块链还准备做什么?
  10. Java动态代理之InvocationHandler最简单的入门教程
  11. About IndexDB(转)
  12. 【原创】tarjan算法初步(强连通子图缩点)
  13. vue路由配置src/router/index.js
  14. c# Repeater中CommandArgument传多个参数
  15. 浅谈python-docx的缩进问题——如何缩进两个字符
  16. 天真贝叶斯学习机 | TiDB Hackathon 优秀项目分享
  17. FlashFXP使用及连接不上的错误问题
  18. mac 安装问题汇总
  19. “Parallels Desktop” 已损坏,无法打开。您应该推出磁盘映像。处理办法
  20. 校园网同时连手机和电脑、用数据线给电脑连网

热门文章

  1. 今天讲一下完整的前端模块化,很实用
  2. Java实现Excel导入导出(附Demo)
  3. 2022-2027年中国海参行业市场深度分析及投资战略规划报告
  4. JAVA多线程模拟火车站售票大厅
  5. Hack the box: Bastion
  6. World中利用宏命令批量删除页眉和页脚
  7. 导致无法查看隐藏文件的病毒处理
  8. 数据库 -- 基础操作(二)
  9. 【北交所周报】北交所再迎8只新股;康普化学、凯华材料上市首日逆势大涨;康乐卫士过会,或成北交所最大IPO;北交所推出直联机制...
  10. 安卓投屏传输手机声音到电脑最简单的方式