OpenFeign
概述
OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的**@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理方式山生实现类,实现类中做负载均衡**并调用其它服务。
Fegin
Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务,Feign的使用方法是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。现在Fegin已停用。
openFeign的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
OpenFeign的服务调用
概述
以前我们的服务消费者使用Ribbon+RestTemplate进行服务调用,现在我们使用OpenFeign来进行调用,一个接口+一个注解(@FeignClient)的方式。
yml文件
server:
port: 8020
spring:
application:
name: eureka-feign
eureka:
client:
# 表示将自己注册进EurekaServer,默认为true
register-with-eureka: false
# 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
fetch-registry: true
service-url:
# 集群注册
defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
-
主启动类(添加@EnableFeignClients注解)
-
service业务层接口添加FeignClient注解
注意还要加上@Component注解
属性:
- name:对象名
- url:对象的地址
OpenFeign的超时控制
OpenFeign默认等待1秒钟,超过后报错。
设置OpenFeign的超时等待
因为具体发送请求包含负载均衡都是由底层的Ribbon实现的,所以我们实际上是要配置Ribbon的超时设置。
yml配置
server:
port: 8020
spring:
application:
name: eureka-feign
eureka:
client:
# 表示将自己注册进EurekaServer,默认为true
register-with-eureka: false
# 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
fetch-registry: true
service-url:
# 集群注册
defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
# 设置OpenFeign的客户端超时时间(OpenFeign底层是Ribbon)
ribbon:
# 读取超时时间,建立连接后服务器取到可用资源所用的时间
ReadTimeout: 5000
# 连接所用的时间,适用于网络正常情况下,两端连接所用的时间
ConnectTimeout: 5000
OpenFeign日志增强
OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。
日志级别
OpenFeign有一下几个日志级别
- NONE:默认的,不显示任何日志。
- BASIC:仅记录请求方法,URL,响应状态码及执行时间。
- HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息。
- FULL:除了HEADERS中定义的信息之外,还有请求和响应正文元数据。
日志配置
OpenFeign的日志需要专门有个日志Bean来定义
在@Configuration的类中配置
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
Logger是OpenFeign的Logger类,不要用错了(import feign.Logger;)
在application.yml中配置每个业务类的日志监控级别。
server:
port: 8020
spring:
application:
name: eureka-feign
eureka:
client:
# 表示将自己注册进EurekaServer,默认为true
register-with-eureka: false
# 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
fetch-registry: true
service-url:
# 集群注册
defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
# 设置OpenFeign的客户端超时时间(OpenFeign底层是Ribbon)
ribbon:
# 读取超时时间,建立连接后服务器取到可用资源所用的时间
ReadTimeout: 5000
# 连接所用的时间,适用于网络正常情况下,两端连接所用的时间
ConnectTimeout: 5000
logging:
level:
# feign日志已什么级别监控哪一个接口
文件夹名称.接口名名称: debug