OpenFeign
主要基于
接口和注解实现了远程调用
源码总结:面试
1. OpenFeign
用过吗?它是如何运作的?
在主启动类上加上
@EnableFeignClients
注解后,启动会进行包扫描,把所有加了
@FeignClient(value=
”
xxx-service
”
)
注解的接口进行创建代理对象通过代理对象,使用
ribbon
做了负载均衡和远程调用
2.
如何创建的代理对象?
当 项 目 在 启 动 时 , 先 扫 描 , 然 后 拿 到 标 记 了
@FeignClient
注 解 的 接 口 信 息 , 由
ReflectiveFeign
类的
newInstance
方法创建了代理对象
JDK
代理
3. OpenFeign
到底是用什么做的远程调用?
使用的是
HttpURLConnection
(
java.net
)
4. OpenFeign
怎么和
ribbon
整合的?
在代理对象执行调用的时候
OpenFeign 的日志功能
从前面的测试中我们可以看出,没有任何关于远程调用的日志输出,如请头,参数 Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而揭开
Feign
中
Http
请求的所有细节
OpenFeign
的日志级别
NONE
默认的,不显示日志
BASE
仅记录请求方法,
URL
,响应状态码及执行时间
HEADERS
在
BASE
之上增加了请求和响应头的信息
FULL
在
HEADERS
之上增加了请求和响应的正文及无数据
创建配置类 或则 在主函数类中创建也可以
package com.it;
import feign.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class UserService02Application {
public static void main(String[] args) {
SpringApplication.run(UserService02Application.class, args);
}
/**
* 打印feign日志信息的级别
* @return
*/
@Bean
public Logger.Level level(){
return Logger.Level.FULL;
}
}
修改该项目的配置文件
,添加如下语句
调用测试