Spring Cloud OpenFeign 性能优化的4个方法

OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件。它的出现就是为了替代已经进入停更维护状态的 Netflix Feign,是目前微服务间请求的常用通讯组件。

1.超时设置

OpenFeign 底层依赖Ribbon 框架,并且使用了 Ribbon 的请求连接超时时间和请求处理超时时间作为其超时时间,可以通过配置修改。
通过修改 Ribbon 的超时时间:

ribbon:ReadTimeout: 5000 ConnectionTimeout: 10000

直接修改 OpenFeign配置:

feign:client:config:default: connectTimeout: readTimeout:

2. 请求连接

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

2.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.2 开启 Apache HttpClient 使用

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

feign:client:httpclient: # 开启 HttpClientenabled: true

3. 数据压缩

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

feign:compression:request:enabled: true mime-types: text/xml,application/xml, application/json min-request-size: 1024 response:enabled: true

4. 负载均衡策略

OpenFeign 底层使用的是 Ribbon 做负载均衡的,它默认的负载均衡策略是轮询策略。
除了轮询策略之外,我们还有其他 6 种内置的负载均衡策略可以选择,这些负载均衡策略如下:

  • 权重策略:WeightedResponseTimeRule,根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。
  • 最小连接数策略:BestAvailableRule,也叫最小并发数策略,它是遍历服务提供者列表,选取连接数最小的⼀个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。
  • 区域敏感策略:ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。
  • 可用敏感性策略:AvailabilityFilteringRule,先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。
  • 随机策略:RandomRule,从服务提供者的列表中随机选择一个服务实例。
@Configuration
public class MyRuleConfig {@Bean@LoadBalancedpublic IRule myRule(){return new RandomRule();}
}

5. 总结

OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件,在生产环境中我们可以按照业务需要按需进行配置调整以求达到最好的性能。

6. 彩蛋

想要获取更多Java开发相关材料,请微信搜**【小白技术圈】**阅读,发送回复 G02获取Java经典面试题!欢迎大大们催更。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/126028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】排序

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;数据结构 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 前言一、排序的概念及运用二、常…

Swift SwiftUI CoreData 过滤数据 1

Xcode: Version 14.3.1 (14E300c) iOS: 16 预览&#xff1a; Code: import SwiftUI import CoreDatastruct TodosSearch: View {State private var search_title "测试"FetchRequest var todos_search: FetchedResults<Todo>init() {let request: NSFetchReq…

【linux进程(二)】如何创建子进程?--fork函数深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程状态管理 1. 前言2. 查看…

Gmail 将停止支持基本 HTML 视图

根据 Google 支持文档的更新内容&#xff0c;Gmail 将从明年 1 月起停止支持基本 HTML 视图。 ▲ Gmai 基本 HTML 视图界面 目前网页版 Gmail 提供两个界面&#xff1a;基本 HTML 视图和标准视图。停止支持基本 HTML 视图后&#xff0c;当前打开经典模式的基本 HTML 视图模式 …

JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域

文章目录 前言 1&#xff1a;什么叫作用域 一&#xff1a;全局作用域 1&#xff1a;全局变量的声明 2&#xff1a;变量声明和使用的顺序 3&#xff1a;方法声明和使用的顺序 前言 1&#xff1a;什么叫作用域 可以起作用的范围 function fun(){var a 1; } fun();consol…

light client轻节点简介

1. 引言 前序博客&#xff1a; Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户&#xff0c;可选择运行全节…

苹果mac电脑securecrt下载 附securecrt破解文件

SecureCRT for Mac是一款由VanDyke Software公司开发的终端仿真软件&#xff0c;专为Mac OS X系统设计&#xff0c;用于提供安全SSH、Telnet和其他协议的远程访问和管理。它适用于各种操作系统和设备&#xff0c;如Windows、Linux和UNIX等&#xff0c;为Mac用户提供了广泛的连接…

黑豹程序员-架构师学习路线图-百科:JSON替代XML

文章目录 1、数据交换之王2、XML的起源3、JSON诞生4、什么是JSON 1、数据交换之王 最早多个软件之间使用txt进行信息交互&#xff0c;缺点&#xff1a;纯文本&#xff0c;无法了解其结构&#xff1b;之后使用信令&#xff0c;如&#xff1a;电话的信令&#xff08;拨号、接听、…

【C语言】利用数组处理批量数据(字符数组)

前言:前面已经介绍了&#xff0c;字符数据是以字符的ASCII代码存储在存储单元中的&#xff0c;一般占一个字节。由于ASCII代码也属于整数形式&#xff0c;因此在C99标准中&#xff0c;把字符类型归纳为整型类型中的一种。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x…

makeMakefile

一、 什么是make&Makefile &#xff1f; ①make 是一条命令,makefile是一个文件,配合使用,通过依赖关系和依赖方法达到我们形成可执行程序的目的 ②makefile好处就是可以进行 自动化编译 ” &#xff0c;极大的提高软件开发的效率,一旦写好&#xff0c;只需要一个 make 命令…

手机图片合成gif怎么操作?用这个网站试试

制作gif动图的工具越来越多&#xff0c;但是很多时候使用电脑并不方便&#xff0c;想要在手机上制作gif动图的时候应该怎么办呢&#xff1f;很简单&#xff0c;给大家分享一款无需下载手机浏览器就能操作的gif制作&#xff08;https://www.gif.cn/&#xff09;工具-GIF中文网&a…

【AI视野·今日Robot 机器人论文速览 第四十七期】Wed, 4 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 4 Oct 2023 Totally 40 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;基于神经网络的多模态触觉感知, classification, position, posture, and force of the grasped object多模态形象的解耦(f…