中国免费网站服务器下载,在线A视频网站(级做爰片),开发app费用,手机app软件本篇文章主要会讲解 Feign 性能优化的问题#xff0c;例如Gzip压缩、HTTP连接池、请求超时等。1.Gzip压缩1.1 概述gzip 介绍#xff1a;gzip 是一种数据格式#xff0c;采用 deflate 算法压缩数据#xff1b;gzip 是一种流行的文件压缩算法#xff0c;应用十分广泛…本篇文章主要会讲解 Feign 性能优化的问题例如Gzip压缩、HTTP连接池、请求超时等。1.Gzip压缩1.1 概述gzip 介绍gzip 是一种数据格式采用 deflate 算法压缩数据gzip 是一种流行的文件压缩算法应用十分广泛尤其是在 Linux 平台。gzip 能力当 Gzip 压缩一个纯文本文件时效果是非常明显的大约可以减少 70 以上的文件大小。gzip 作用网络数据经过压缩后实际上降低了网络传输的字节数最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻除了节省流量改善用户的浏览体验外另一个潜在的好处是 Gzip 与搜索引擎的抓取工具有着更好的关系。1.2 HTTP协议中关于压缩传输的规定客户端向服务器请求中带有Accept-Encoding:gzipdeflate 字段向服务器表示客户端支持的压缩格式(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 TYPEmin-request-size: 512 # 配置压缩数据大小的最小阈值默认 2048enabled: true # 请求是否开启 gzip 压缩response:enabled: true # 响应是否开启 gzip 压缩复制代码全局配置对客户端浏览器的请求以及 Consumer 对 Provider 的请求与响应都实现 Gzip 压缩。服务消费者 application.ymlserver:compression:# 是否开启压缩enabled: true# 配置压缩支持的 MIME TYPEmime-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.httpcomponentshttpclient4.5.11io.github.openfeignfeign-httpclient10.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 # 请求处理的超时时间复制代码