一、Feign介绍和简单基本使用流程
Feign是一种负载均衡的HTTP客户端, 使用Feign调用API就像调用本地方法一样,从避免了调用目标微服务时,需要不断的解析/封装json 数据的繁琐。Feign集成了Ribbon。Ribbon+eureka是面向微服务编程,而Feign是面向接口编程。
Fegin是一个声明似的web服务客户端,它使得编写web服务客户端变得更加容易。使用Fegin创建一个接口并对它进行注解。它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign。
Feign内部集成了ribbon,自动实现了负载均衡
二、Feign自定义配置
如果要调试的时候可以使用FULL,但平时建议一般使用BASIC或NONE,因为记录日志还是会消耗一定的性能的
设置超时:
- 设置openFeign的超时时间
- 设置Ribbon的超时时间
1、设置Ribbon的超时时间(不推荐)
设置很简单,在配置文件中添加如下设置:
1 | ribbon: |
2、设置openFeign的超时时间(推荐)
openFeign设置超时时间非常简单,只需要在配置文件中配置,如下:
1 | feign: |
default设置的是全局超时时间,对所有的openFeign接口服务都生效
但是正常的业务逻辑中可能涉及到多个openFeign接口的调用,如下图:
上图中的伪代码如下:
1 | public T invoke(){ |
那么上面配置的全局超时时间能不能通过呢?很显然是serviceA
、serviceB
能够成功调用,但是serviceC
并不能成功执行,肯定报超时。
此时我们可以给serviceC
这个服务单独配置一个超时时间,配置如下:
1 | feign: |
注意:单个配置的超时时间将会覆盖全局配置。
三、Feign的性能调优
Feign是一个声明式客户端,它只是把我们的声明变成http请求,最后发送http请求时还是会应用到一些别的客户端