介绍
作为Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架构下服务之间的调用提供了解决方案。首先,利用了OpenFeign的声明式方式定义Web服务客户端;其次还更进一步,通过集成Ribbon或Eureka实现负载均衡的HTTP客户端。
配置
启动类添加注解:
@EnableFeignClients
新建接口,添加feignclient注解
@FeignClient(name = "myServiceName", configuration = MyConfiguration.class, ...)
public interface MyService {
@RequestMapping("/")
public String getName();
}
该接口请求路径和参数跟调用的接口保持一致
特性
1.通信方式变更(okhttp/httpclient)
feign通过jdk中的HttpURLConnection向下游服务发起http请求, 但是缺乏连接池的支持,在达到一定流量的后服务肯定会出问题
- pom.xml中,加入对OkHttp的依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
- application.yaml中
# 只能启用一个
feign:
okhttp:
enabled: true
httpclient:
enabled: false
2.日志
OpenFeign的日志级别有:
NONE: 默认的,不显示任何日志
BASIC: 仅记录请求方法、URL、响应状态码以及执行时间
HEADERS:除了BASIC 中自定义的信息外,还有请求和响应的信息头
FULL: 除了HEADERS中定义的信息外, 还有请求和响应的正文以及元数据。
1.自己写一个配置类
@Configuration
public class OpenFeignLogConfig {
@Bean
Logger.Level feignLoggerLeave(){
return Logger.Level.FULL;
}
}
2.配置文件
logging:
level:
# feign日志以什么级别监控哪个接口
com.king.springcloud.service.OrderFeignService: debug
3.原理:
Feign要做的事
1.通过主类上的EnableFeignClients 注解开启FeignClient;
2.程序启动后,会扫描所有FeignClient 注解的类,并将这些信息注入到IOC 容器中;
3.接口被调用时,通过jdk代理,以及反射(Spring处理注解的方式),来生成具体的Reqest
4.Request 交给httpclient处理,这里的httpclient 可以是OkHttp,也可以是HttpUrlConnection
5.结合Ribbon 实现负载均衡