本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
本文主要介绍下在工作中使用Feign的一些配置和优化
使用到的maven包
<!--引入 apache httpclient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<!--替换feign的默认http组件为 httpclient-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
feign配置调用时日志输出
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class FeignConfig {
@Bean
Logger.Level feignLevel() {
return Logger.Level.FULL;
}
}
四个日志级别
NONE:没有日志记录
BASIC:只记录请求方法和URL以及响应状态码和执行时间
HEADERS:记录请求和响应头的基本信息
FULL:记录请求和响应的头、正文和元数据
feign调用时设置请求参数
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class FeignConfig {
@Bean
public RequestInterceptor requestInterceptor() {
return new FeignRequestInterceptor();
}
}
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (Objects.nonNull(requestAttributes)) {
HttpServletRequest request = requestAttributes.getRequest();
String userId = request.getHeader("userId");
template.header("userId", userId);
}
}
}
feign性能优化配置连接池
feign:
httpclient:
# 让feign使用apache httpclient请求,默认使用的是URLConnection
enabled: true
# feign的最大连接数
max-connections: 200
# feign单个路径的最大连接数
max-connections-per-route: 50