Feign介绍与应用(包含Feign优化)"/>
Feign介绍与应用(包含Feign优化)
一、Feign概述
Feign是Spring Cloud提供的声明式、模板化的HTTP客户端, 它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring MVC注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。
二、Feign参数的传递
1、引入Feign的依赖
2、传参方式:
2.1restful风格:
feign接口:@PathVarible
【拼接restful形式的url】
Feign客户端
Feign的接口
启动类开启feign的扫描
测试
2.2 问号 ?传参
feign接口:@RequestParam
【拼接?形式的url】
Feign客户端
Feign接口
测试
2.3 pojo传参
provider: @RequestBody User user
【获取请求体中的json串】
客户端
接口
测试
三、Feign的工作原理
1、将feign接口扫描到spring的容器
@EnableFeignClients开启feign的注解扫描,扫描被@FeignClient的接口生成代理类,并把代理类交给spring容器管理
2、为接口的方法创建RequestTemplat
当定义的的Feign接口中的方法被调用时,通过JDK的代理方式为Feign接口生成了一个动态代理类,当生成代理时,Feign会为每个接口方法创建一个RequestTemplate。该对象封装了HTTP请求需要的全部信息,如请url、参数,请求方式等信息都是在这个过程中确定的。
3、发起请求
发送请求时会通过RequestTemplate创建一个Request对象,然后Clien使用Request对象发送请求
四、Feign的优化
1、Http连接池
两台服务器建立HTTP
连接的过程涉及到多个数据包的交换,很消耗时间。采用HTTP
连接池可以节约大量的时间提示吞吐量。Feign
的HTTP
客户端支持3种框架:HttpURLConnection
、HttpClient
、OkHttp
。为了性能考虑,我们可以引入httpclient
、okhttp
作为底层的通信框架。
添加依赖测试是否开启
在feign.SynchronousMethodHandler#executeAndDecode()
这个方法中可以清楚的看出调用哪个 client。
2、开启日志
在客户端的yml里面配置
3、GZIP 压缩
当 Gzip 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少 70% 以上的文件大小,网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可 以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏 览体验外,另一个潜在的好处是 Gzip 与搜索引擎的抓取工具有着更好的关系。例如 Google 就可以通过直接读取 gzip 文件来比普通手工抓取 更快地检索网页。
测试
4、 Feign超时优化
数据太多的话查询的速度会变得慢一些,导致查询不出,所以需要指定的超时时间
方法一: 使用ribbon定时
方法二:使用feign定时
更多推荐
Feign介绍与应用(包含Feign优化)
发布评论