OpenFeign
OpenFeign
OpenFeign是一个声明式的http客户端,是SpringCloud在Eureka公司开源的Feign基础上改造而来
地址: https://github.com/OpenFeign/feign
- 作用:
基于SpringMVC的常见注解,简化RestTemplate的http请求的发送
OpenFeign的使用
- 引入依赖,包括OpenFeign和负载均衡的组件SpringCloudLoadBalancer
java
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 通过注解 @EnableFeignClients启动OpenFeign功能,添加在启动类上
- 编写FeignClient
java
@FeignClient(value="服务名称")
public interface testClient{
@GetMapper("/test")
List<User> test(@RequestParam("id") Collection<Long> id);
}
- 使用FeignClient,实现远程调用
java
List<User> test = testclient.test(List.of(1,2,3));
连接池
OpenFeign的底层是使用Client发送请求的,Client每次发送请求需要不断地重复创建连接,我们可以该换底层发送请求的框架:
HttpURLConnection
:默认实现,不支持连接池
Apache HttpClient
:支持连接池
OKHttp
:支持连接池
- 该换OKHttp
- 引入依赖
java
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
- 开启连接池功能
yml
feign:
okhttp:
enabled: true #开启连接池支持
配置完成之后底层就会改变为OKHttp来发送请求
日志
OpenFeign只会在FeignClient所在的包的日志级别为DEBUG时,才会输出日志,而且日志级别由四级:
NONE
:不记录任何日志信息,还是默认值
BASIC
:仅记录请求的方式,URL以及响应状态码和执行时间
HEADERS
:在BASIC的基础上,额外记录了请求和响应的头信息
FULL
:记录所有请求和响应的明细,包括头信息,请求体,元数据
由于Feign默认的日志级别就是NONE,所以默认我们看不到请求日志
如果要更改默认的日志级别需要自定义日志级别的Bean
java
@Bean
public class test{
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.Full;
}
}
再将上述的Bean放在注解 @FeignClient中使其生效
java
@FeignClient(value="服务名称",configuration=test.Class)
不过这样只会对某个客户端有效,如果想进行全局的配置
java
@EnableFeignClients(defaultConfiguration=DefaultFeignConfig.calss)
注解放在启动类上就可以开启日志