iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >分享Spring Cloud OpenFeign 的五个优化技巧
  • 434
分享到

分享Spring Cloud OpenFeign 的五个优化技巧

2024-04-02 19:04:59 434人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、超时优化1、设置Ribbon超时时间2、设置OpenFeign超时时间二、请求连接优化1、引入Apache HttpClient依赖2、开启Apache HttpClient

前言:

OpenFeign 是 spring 官方推出的一种声明式服务调用和负载均衡组件。它的出现就是为了替代已经进入停更维护状态的 Feign(Netflix Feign),同时它也是 Spring 官方的顶级开源项目。我们在日常的开发中使用它的频率也很高,而 OpenFeign 有一些实用的小技巧,配置之后可以让 OpenFeign 更好的运行,所以本文我们就来盘点一下(也欢迎各位老铁评论区留言补充)。

一、超时优化

OpenFeign 底层内置了 Ribbon 框架,并且使用了 Ribbon 的请求连接超时时间和请求处理超时时间作为其超时时间,而 Ribbon 默认的请求连接超时时间和请求处理超时时间都是 1s

如下源码所示:

所有当我们使用 OpenFeign 调用了服务接口超过 1s,就会出现以下错误:

因为 1s 确实太短了,因此我们需要手动设置 OpenFeign 的超时时间以保证它能正确的处理业务。

OpenFeign 的超时时间有以下两种更改方法:

  • 通过修改 Ribbon 的超时时间,被动的修改 OpenFeign 的超时时间。
  • 直接修改 OpenFeign 的超时时间(推荐使用)。

1、设置Ribbon超时时间

在项目配置文件 application.yml 中添加以下配置:

ribbon:
ReadTimeout: 5000 # 请求连接的超时时间
ConnectionTimeout: 10000 # 请求处理的超时时间

2、设置OpenFeign超时时间

在项目配置文件 application.yml 中添加以下配置:

feign:
client:
 config:
   default: # 设置的全局超时时间
     connectTimeout: 2000 # 请求连接的超时时间
     readTimeout: 5000 # 请求处理的超时时间

推荐使用此方式来设置 OpenFeign 的超时时间,因为这样的(配置)语义更明确。

二、请求连接优化

OpenFeign 底层通信组件默认使用 jdk 自带的 URLConnection 对象进行 HTTP 请求的,因为没有使用连接池,所以性能不是很好。我们可以将 OpenFeign 的通讯组件,手动替换成像 Apache HttpClient 或 OKHttp 这样的专用通信组件,这些的专用通信组件自带连接池可以更好地对 HTTP 连接对象进行重用与管理,同时也能大大的提升 HTTP 请求的效率。接下来我以 Apache HttpClient 为例,演示一下专用通讯组件的使用。

1、引入Apache HttpClient依赖

在项目的依赖管理文件 pom.xml 中添加以下配置:

<!-- 添加 openfeign 框架依赖 -->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 添加 httpclient 框架依赖 -->
<dependency>
 <groupId>io.GitHub.openfeign</groupId>
 <artifactId>feign-httpclient</artifactId>
</dependency>

2、开启Apache HttpClient使用

启动 Apache HttpClient 组件,在项目配置文件 application.yml 中添加以下配置,:

feign:
client:
 httpclient: # 开启 HttpClient
   enabled: true

验证 Apache HttpClient 配置是否生效,可以在 feign.SynchronousMethodHandler#executeAndDecode 方法上打断点就可以看到了,

如下图所示:

三、数据压缩

OpenFeign 默认不会开启数据压缩功能,但我们可以手动的开启它的 Gzip 压缩功能,这样可以极大的提高宽带利用率和加速数据的传输速度,在项目配置文件 application.yml 中添加以下配置:

feign:
compression:
 request:
   enabled: true # 开启请求数据的压缩功能
   mime-types: text/xml,application/xml, application/JSON # 压缩类型
   min-request-size: 1024 # 最小压缩值标准,当数据大于 1024 才会进行压缩
 response:
   enabled: true # 开启响应数据压缩功能

PS:如果服务消费端的 CPU 资源比较紧张的话,建议不要开启数据的压缩功能,因为数据压缩和解压都需要消耗 CPU 的资源,这样反而会给 CPU 增加了额外的负担,也会导致系统性能降低。

四、负载均衡优化

OpenFeign 底层使用的是 Ribbon 做负载均衡的,查看源码我们可以看到它默认的负载均衡策略是轮询策略,

如下图所示:

然而除了轮询策略之外,我们还有其他 6 种内置的负载均衡策略可以选择,这些负载均衡策略如下:

  • 权重策略:  WeightedResponseTimeRule,根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。它的实现原理是,刚开始使用轮询策略并开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高被选中的概率也越大。
  • 最小连接数策略:  BestAvailableRule,也叫最小并发数策略,它是遍历服务提供者列表,选取连接数最小的⼀个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。
  • 区域敏感策略:  ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。
  • 可用敏感性策略:  AvailabilityFilteringRule,先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。
  • 随机策略:  RandomRule,从服务提供者的列表中随机选择一个服务实例。
  • 重试策略:  RetryRule,按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。

出于性能方面的考虑,我们可以选择用权重策略或区域敏感策略来替代轮询策略,因为这样的执行效率最高。

五、日志级别优化

OpenFeign 提供了日志增强功能,它的日志级别有以下几个:

  • NONE:  默认的,不显示任何日志。
  • BASIC:  仅记录请求方法、URL、响应状态码及执行时间。
  • HEADERS:  除了 BASIC 中定义的信息之外,还有请求和响应的头信息。
  • FULL:  除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据。

我们可以通过配置文件来设置日志级别,配置信息如下:

logging:
  level:
    cn.myjszl.service: debug

其中 cn.myjszl.service 为 OpenFeign 接口所在的包名。虽然 OpenFeign 默认是不输出任何日志,但在开发阶段可能会被修改,因此在生产环境中,我们应仔细检查并设置合理的日志级别,以提高 OpenFeign 的运行效率。

总结

OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件,在生产环境中我们可以通过以下配置来优化

OpenFeign 的运行:

  • 修改 OpenFeign 的超时时间,让 OpenFeign 能够正确的处理业务。
  • 通过配置专用的通信组件 Apache HttpClient 或 OKHttp,让 OpenFeign 可以更好地对 HTTP 连接对象进行重用和管理,以提高其性能。
  • 开启数据压缩功能,可以提高宽带利用率和加速数据传输速度。
  • 使用合适的负载均衡策略来替换默认的轮询负载均衡策略,已获得更好的执行效率。
  • 检查生成环境中 OpenFeign 的日志级别,选择合适的日志输出级别,防止无效的日志输出。

到此这篇关于spring cloud OpenFeign 的五个优化技巧的文章就介绍到这了,更多相关Spring Cloud OpenFeign 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 分享Spring Cloud OpenFeign 的五个优化技巧

本文链接: https://www.lsjlt.com/news/149632.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 分享Spring Cloud OpenFeign 的五个优化技巧
    目录一、超时优化1、设置Ribbon超时时间2、设置OpenFeign超时时间二、请求连接优化1、引入Apache HttpClient依赖2、开启Apache HttpClient...
    99+
    2022-11-13
  • Spring Cloud OpenFeign优化的技巧有哪些
    这篇文章主要介绍了Spring Cloud OpenFeign优化的技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Cloud OpenFeign优...
    99+
    2023-06-30
  • Win8系统13个简单优化技巧分享
      每一台电脑使用时间久了就是发现慢、卡顿等现象,那么我们需要对机子进行简单的优化。在Windows8系统中,有哪些优化技巧呢 win8   1.关闭视觉特效   反正 Win8 的界面主题都已经是反璞归...
    99+
    2022-06-04
    简单 技巧 系统
  • 五个提升Python的执行效率的技巧分享
    目录1、合理使用标准或非标准库2、减少循环的使用3、注意重复代码运行4、减少全局变量使用5、使用合理的数据结构python作为使用最广泛的编程语言之一,有着无穷无尽的第三方非标准库的...
    99+
    2023-05-15
    Python提升执行效率技巧 Python提升执行效率 Python 技巧
  • 优化SQL语句的技巧分享
    这篇文章给大家介绍优化SQL语句的技巧分享,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。建立索引不是建的越多越好,原则是:第一:一个表的索引不是越多越好,也没有一个具体的数字,根据以往...
    99+
    2022-10-18
  • 8个JavaScript条件语句优化小技巧分享
    目录1、Array.includes2、Array.every3、尽早 return4、三元运算符5、switch...case6、Map/Object7、默认函数参数和解构8、逻辑...
    99+
    2022-11-13
  • Spring外部化配置的几种技巧分享
    目录正文Envrionment 获取外部配置修改Spring默认配置文件名称Value注解配置来源外部化配置文件优先级问题Autowire注入ConfigurableEnvrionm...
    99+
    2022-11-12
  • 五个嵌入式C语言中的实用技巧分享
    目录1、动态绑定、回调函数2、使用宏给结构体初始化3、结构体内置函数指针4、使用do{}while(0)封装宏5、void*1、动态绑定、回调函数 回调函数可以达到动态绑定的作用,在...
    99+
    2022-12-30
    嵌入式C语言实用技巧 C语言实用技巧 嵌入式C语言
  • 分享几个Java工作中实用的代码优化技巧
    目录1.类成员与方法的可见性最小化2.使用位移操作替代乘除法3.尽量减少对变量的重复计算4.不要捕捉RuntimeException5.使用局部变量可避免在堆上分配6.减少变量的作用...
    99+
    2022-11-13
  • 分享12个Vue开发中的性能优化小技巧(实用!)
    目录前言1. 长列表性能优化1. 不做响应式2. 虚拟滚动2. v-for 遍历避免同时使用 v-if3. 列表使用唯一 key4. 使用 v-show 复用 DOM5. 无状态的组...
    99+
    2022-11-13
  • 18个帮你简化代码的Python技巧分享
    目录什么是单行代码为什么我需要它们开始1.if-else2. elif3. if4.函数5.循环(列表推导式)6. if 循环7. if else 循环8. While 循环与 if...
    99+
    2022-11-11
  • MySQL数据库性能优化的六大技巧分享
    本篇内容主要讲解“MySQL数据库性能优化的六大技巧分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库性能优化的六大技巧分享”吧!1.存储引擎的...
    99+
    2022-10-18
  • 分享一个趣味性十足的Python可视化技巧
    如下图所示:在示例照片当中有着各种各样的颜色,我们将通过Python中的可视化模块以及opencv模块来识别出图片当中所有的颜色要素,并且将其添加到可视化图表的配色当中。导入模块并加载图片那么按照惯例,第一步一般都是导入模块,可视化用到的模...
    99+
    2023-05-14
    Python 可视化技巧
  • 5个可以在Golang中优化代码以提高性能的技巧分享
    作为一名软件工程师,确保你的代码高效且性能良好是非常重要的。在Golang中,有几个最佳实践和技术可以用来优化你的代码,以获得更好的性能。这里有五个技巧可以帮助你开始工作: 1.明智...
    99+
    2023-03-19
    Golang优化代码技巧 Golang优化代码 Golang优化
  • win8系统瘦身 全方位的Win8系统优化技巧分享
    针对这些问题,用户们想到了采用优化软件优化电脑的手段。不过不少用户在使用了目前市面上的大多数优化软件后,会发觉经过优化后的Windows 8会出现各种莫名其妙的问题,比如开始屏幕消失、应用商店无法安装软件等...
    99+
    2022-06-04
    系统优化 瘦身 技巧
  • Windows操作系统下的ASP网站索引功能优化技巧分享!
    在Windows操作系统下,ASP网站索引是一个非常重要的功能,它可以帮助用户快速地查找到所需的内容。但是,如果ASP网站的索引功能不够优化,可能会导致用户的搜索体验变得很糟糕。因此,在本文中,我们将分享一些关于Windows操作系统下A...
    99+
    2023-06-28
    windows 索引 http
  • 优化Linux系统硬盘的七个实用技巧分别是哪些
    这篇文章将为大家详细讲解有关优化Linux系统硬盘的七个实用技巧分别是哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在Windows系统中,磁盘碎片是一个常见的问题,如果不注意,系统性能...
    99+
    2023-06-17
  • 优化SQL SELECT语句性能的6个简单技巧分别是什么
    本篇文章给大家分享的是有关优化SQL SELECT语句性能的6个简单技巧分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SELECT语...
    99+
    2022-10-19
  • Web开发者必知的25个Apache性能优化技巧分别是东大门
    这篇文章将为大家详细讲解有关Web开发者必知的25个Apache性能优化技巧分别是东大门,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Apache部分:1....
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作