feign服务器响应数据量过大,SpringCloud之Feign 性能优化

本篇文章主要会讲解 Feign 性能优化的问题,例如Gzip压缩、HTTP连接池、请求超时等。

1.Gzip压缩

1.1 概述

​gzip 介绍:gzip 是一种数据格式,采用 deflate 算法压缩数据;gzip 是一种流行的文件压缩算法,应用十分广泛,尤其是在 Linux 平台。

gzip 能力:当 Gzip 压缩一个纯文本文件时,效果是非常明显的,大约可以减少 70% 以上的文件大小。

gzip 作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是 Gzip 与搜索引擎的抓取工具有着更好的关系。

1.2 HTTP协议中关于压缩传输的规定

​客户端向服务器请求中带有:Accept-Encoding:gzip,deflate 字段,向服务器表示客户端支持的压缩格式(gzip 或者 deflate),如果不发送该消息头,服务端默认是不会压缩的。

​服务端在收到请求之后,如果发现请求头中含有 Accept-Encoding 字段,并且支持该类型压缩,就会对响应报文压缩之后返回给客户端,并且携带 Content-Encoding:gzip 消息头,表示响应报文是根据该格式进行压缩的。

​客户端接收到请求之后,先判断是否有 Content-Encoding 消息头,如果有,按该格式解压报文。否则按正常报文处理。

1.3 压缩案例

局部配置

只配置 Consumer 通过 Feign 到 Provider 的请求与相应的 Gzip 压缩。

服务消费者 application.yml

# Feign gzip 压缩

feign:

compression:

request:

mime-types: text/xml,application/xml,application/json # 配置压缩支持的 MIME TYPE

min-request-size: 512 # 配置压缩数据大小的最小阈值,默认 2048

enabled: true # 请求是否开启 gzip 压缩

response:

enabled: true # 响应是否开启 gzip 压缩

复制代码

全局配置

对客户端浏览器的请求以及 Consumer 对 Provider 的请求与响应都实现 Gzip 压缩。

服务消费者 application.yml

server:

compression:

# 是否开启压缩

enabled: true

# 配置压缩支持的 MIME TYPE

mime-types: application/json,application/xml,text/html,text/xml,text/plain

复制代码

2.HTTP连接池

​我们知道,建立 HTTP 连接的过程是很复杂的一个过程,涉及到多个数据包的交换,很耗时间,比如建立TCP连接时,需要的三次握手和四次挥手开销就比较大。

​采用 HTTP 连接池,可以节约大量的 3 次握手 4 次挥手,这样能大大提升吞吐量。

Feign 的 HTTP 客户端支持 3 种框架:HttpURLConnection、HttpClient、OkHttp;默认是 HttpURLConnection。可以通过查看源码 org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration.java 得知。

传统的 HttpURLConnection 是 JDK 自带的,并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。

HttpClient 相比传统 JDK 自带的 HttpURLConnection,它封装了访问 HTTP 的请求头,参数,内容体,响应等等;它不仅使客户端发送 HTTP 请求变得容易,而且也方便了开发人员测试接口(基于 HTTP 协议的),既提高了开发的效率,又提高了代码的健壮性

那么如何使用呢?

首先,在对应消费者项目中,添加对应依赖,因为本文中使用的Hoxton.SR1版本已经默认集成了 apache httpclient 依赖,所以只需要添加一个依赖即可

org.apache.httpcomponents

httpclient

4.5.11

io.github.openfeign

feign-httpclient

10.7.4

复制代码

然后,配置文件中开启即可

feign:

httpclient:

enabled: true # 开启 httpclient

复制代码

**注意:**如果使用 HttpClient 作为 Feign 的客户端工具。那么在定义接口上的注解是需要注意的,如果传递的参数是一个自定义的对象(对象会使用 JSON 格式来专递),需要配置参数类型,例如:@GetMapping(value = "/single/pojo", consumes = MediaType.APPLICATION_JSON_VALUE)。本文中使用的 Spring CLoud 版本,已无需手动配置。

3.请求超时

​Feign 的负载均衡底层用的就是 Ribbon,所以这里的请求超时配置其实就是配置 Ribbon。

在服务压力比较大的情况下,可能处理服务的过程需要花费一定的时间,而默认请求超时的配置是 1s 所以我们需要调整该配置延长请求超时时间。

​在消费者端配置文件添加:

ribbon:

ConnectTimeout: 5000 # 请求连接的超时时间 默认的时间为 1 秒

ReadTimeout: 5000 # 请求处理的超时时间

复制代码

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

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

相关文章

win7关闭系统索引服务器,win7系统如何关闭索引服务

#索引##如何关闭索引##win7#很多用户朋友都知道,打开win7系统的索引服务,会占用一定的电脑系统资源,换句话说,如果我们不需要使用索引服务的话,最好把它关闭,免得影响我们对设备的体验感觉。那么如果关闭iw…

python鼠标移动轨迹_鼠标的另一种选择,肯辛通轨迹球能否改变固有的使用习惯?...

【引言】鼠标,作为电脑甚至是现在Pad的外接输入设备,其地位从1964年雏形诞生的那一刻起便从未被撼动,哪怕是thinkpad的小红点以及外接触摸板的出现。鼠标最早只是一个装有两个滚轮(是圆盘型滚轮而不是后来的球形滚轮)小木头盒子里面&#xff…

在家怎么看公司服务器上的文件,怎么查看云服务器上的文件

怎么查看云服务器上的文件 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。安装完操作系统后的临时云服务器需要进行相关配置&#…

c++thread里暂停线程_Java线程的 6 种状态

作者:( •̀ ω •́ )y出处:https://www.cnblogs.com/laishenghao/p/13972421.html一、线程状态的枚举Java的线程从创建到销毁总共有6种状态。这些状态被定义在Thread类种的内部枚举 State 中,分别如下:1、NEW:初始状态。线程实例已创建&…

hp服务器装xp系统,教你惠普笔记本一键装xp系统的方法

前几天小编闲来无事就跑到网站底下查看粉丝朋友给小编我留言询问的问题,还真的就给小编看到一个问题,那就是惠普笔记本xp系统安装方法,其实小编我有一个十分简单的安装方法可以提供给大家,大家一起来跟小编我一起看看吧。1、首先我…

外链引入css有哪些方式_快速收录的外链操作技巧

外链似乎还依然是大部分行业获取关键词排名的主要方法,现在早已经过来外链是王道的时代。但是对于处于关键词排名前期的新站,外链的作用依然很大。如何才能让我们发布的外链快速被收录然后被计入关键词排名呢?有如下6点需要注意的:一、寻找收…

华为路由器A1如何设置虚拟服务器,华为路由器A1如何设置虚拟服务器

华为路由器A1如何设置虚拟服务器 内容精选换一换当您在使用VPC的路由表功能时,需要在弹性云服务器上部署SNAT,使得VPC内其他没有绑定EIP的弹性云服务器可以通过它访问Internet。该配置对VPC内所有子网生效。已拥有需要部署SNAT的弹性云服务器。待部署SNA…

ad域同步其他ldap账号_域渗透——普通用户权限获得DNS记录

0x00 前言在之前的文章《域渗透——DNS记录的获取》介绍了域渗透中获得DNS管理员权限后获取DNS记录的方法,而更普遍的情况是只有域普通用户的权限,也需要获得DNS记录。本文将会参考公开的资料,整理域普通用户获得DNS记录的方法,修…

vue项目统一响应_Vue响应式原理及总结

Vue 的响应式原理是核心是通过 ES5 的保护对象的 Object.defindeProperty 中的访问器属性中的 get 和 set 方法,data 中声明的属性都被添加了访问器属性,当读取 data 中的数据时自动调用 get 方法,当修改 data 中的数据时,自动调用…

lua虚拟机字节码修改_LUA虚拟机的字节码怎么看?

A : 8 bitsB : 9 bitsC : 9 bitsAx : 26 bits (A, B, and C together)Bx : 18 bits (B and C together)sBx : signed Bx比如这段:function y(...) print(...) end1 [1] GETTABUP 0 0 -1 ; _ENV "print"2 [1] VARARG 1 0 ; VARARG will set L->top3 [1]…

python数据结构中文版_Python官方入门教程_中文版_5.数据结构

5. 数据结构本章将详细介绍一些您已经了解的内容,并添加了一些新内容。5.1. 列表的更多特性列表数据类型还有很多的方法。这里是列表对象方法的清单:list.append(x)在列表的末尾添加一个元素。相当于 a[len(a):] [x] 。list.extend(iterable)使用可迭代…

xss挖掘思路分享_新手指南 | permeate靶场漏洞挖掘思路分享

简介最近在逛码云时候发现permeat靶场系统,感觉界面和业务场景设计的还不错.所以过来分享一下.同时也是分享一下我平时挖掘漏洞的一些思路吧,这篇文章里虽然只简单介绍其中三种漏洞类型,但也是想是一个抛转引玉吧,给web安全新手提供一些挖掘思路.下载地址:GitHub地址…

dom4j实现为list添加父节点_Heap 堆的实现

堆(数据结构)什么是堆堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象堆的性质这种用数组实现的二叉树,假设节点的索引值为index,那么:节点的左孩子节点是 2*index1,节点的右孩…

python concurrent queue_Python的并发并行[2] - 队列[0] - queue 模块

queue模块/ queue Module1常量/ ConstantsPass2函数/ FunctionPass3类/ Class3.1 Queue类类实例化:queue queue.Queue(maxsize0)类的功能:用于生成一个先入先出队列实例传入参数: maxsizemaxsize: int类型,队列的最大值,无空间时阻塞&#xf…

acer软件保护卡清除工具clear_如何清除 APT 缓存来回收宝贵的磁盘空间 | Linux 中国...

导读:在本教程中,我将解释什么是 APT 缓存、为什么会使用它、为什么你要清理它,以及关于清理 APT 缓存你应该知道的其他事情。本文字数:2132,阅读时长大约:3分钟https://linux.cn/article-12787-1.html作者…

检测正常和不正常图_医生提醒:激素正常不等于内分泌正常,带你走出内分泌失调误区...

内分泌失调是女性常见的问题,特别是压力较大的都市女性,常常因为内分泌失调而导致月经紊乱,同时皮肤状态也变得糟糕,让她们很是心烦。一旦怀疑自己是内分泌失调,不少女性都会进行相应的激素检测,但如果检测…

linux设置挂载服务端防火墙_「rpcbind」Linux下nfs+rpcbind实现服务器之间的文件共享(mount 挂载) - seo实验室...

rpcbind1、安装nfs和rpcbind检查自己的电脑是否已经默认安装了nfs和rpcbind:rpm -aq | grep nfsnfs-utils-1.2.3-54.el6.x86_64nfs4-acl-tools-0.3.3-6.el6.x86_64nfs-utils-lib-1.1.5-9.el6.x86_64rpm -aq | grep rpcbindrpcbind-0.2.0-11.el6.x86_64这表示系统已经…

antd 判断input输入内容是否大于_Python基础语法 | 代码规范amp;判断语句amp;循环语句...

Python基础语法代码的执行顺序从上到下从左到右代码规范模块名,包名,普通数据量一般小写字母,多个单词之间用 _ 连接不要用系统定义的名称,具有特殊意义的表示符,如:doc,txt之类的每行代码不易过长单个字母…

zstd安装_PHP: 安装 - Manual

安装此 PECL 扩展未与PHP 捆绑。An example installation procedure on Ubuntu 18.04 with PHP 7.2:// Dependencies$ apt install build-essential libprotobuf-dev libboost-dev openssl protobuf-compiler liblz4-tool zstd// PHP with the desired extensions; php7.2-dev…

小米手环导出心率_这个功能有意思,小米11支持指纹检测心率,没有手环也不怕...

原标题:这个功能有意思,小米11支持指纹检测心率,没有手环也不怕昨晚,小米发布了新一代数字旗舰小米11,在处理器和屏幕等方面都做了升级,相比于这些重点,有一项新功能的介绍篇幅不是很多&#xf…