1. Spring Cloud OpenFeign简介
OpenFeign
是SpringCloud
提供的一个声明式的伪Http
客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。OpenFeign
是SpringCloud
在Feign
的基础上支持了Spring MVC
的注解,并通过动态代理的方式产生实现类来做负载均衡并进行调用其他服务。
1.1 OpenFeign使用流程:
- 引入
Spring Cloud OpenFeign
的依赖 - 启动类上添加注解
@EnableFeignCleints
- 按照
Feign
的规则定义接口并添加@FeignClient
注解 - 在需要使用
Feign
接口的类里注入,直接调用接口方法
2. OpenFeign的使用
- 在
pom.xml
文件中添加依赖:
1 | <dependency> |
- 在启动类上,加上
@EnableFeignCleints
注解:
1 | // basePackages 是Feign接口定义的路径 |
- 按照
Feign
的规则定义接口:
1 | // 括号内是远程调用微服务在注册中心的服务名 |
- 调用
Feign
接口方法
1 |
|
- 远程服务接口:
1 |
|
3. OpenFeign的核心工作原理:
- 通过
@EnableFeignCleints
触发Spring
应用程序对classpath
中@FeignClient
修饰类的扫描 - 解析到
@FeignClient
修饰类后,Feign
框架通过扩展SpringBeanDeifinition
的注册逻辑,最终注册一个FeignClientFacotoryBean
进入Spring
容器 Spring
容器在初始化其他用到@FeignClient
接口的类时,获得的是FeignClientFacotryBean
产生的一个代理对象Proxy
.- 基于
java
原生的动态代理机制,针对Proxy
的调用,都会被统一转发给Feign
框架所定义的一个InvocationHandler
,由该Handler
完成后续的HTTP
转换,发送,接收,翻译HTTP
响应的工作
4. OpenFeign日志
Feign
和 RestTemplate
不一样 ,对请求细节封装的更加彻底,不管是请求还是请求的参数,还是响应的状态都看不到,想要看到请求的细节需要通过Feign
的日志,我们可以通过配置来调整日志级别,从而了解OpenFeign
中Http
请求的细节。即对OpenFeign
远程接口调用的情况进行监控和日志输出。
4.1 日志级别
NONE
:默认级别,不显示日志BASIC
:仅记录请求方法、URL
、响应状态及执行时间HEADERS
:除了BASIC
中定义的信息之外,还有请求和响应头信息FULL
:除了HEADERS
中定义的信息之外,还有请求和响应正文及元数据信息
4.2 配置日志bean
1 |
|
4.3 开启日志
在YMAL
配置文件中中指定监控的接口,以及日志级别
1 | logging: |