openfeign
spring boot feign 使用
1. 添加 feign 客户端依赖
由于Spring Cloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2. 在启动类上添加 @EnableFeignClients 注解
3. 创建客户端函数
@FeignClient("UserService") //服务名称
public interface UserClient {
@GetMapping("/user/{id}") //http 请求
User getById(@PathVariable("id") Long id);
}
4. 配置函数,设置请求头
@Configuration
public class FeignConfiguration {
@Bean
public RequestInterceptor requestInterceptor(){
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
if(requestAttributes!=null){
HttpServletRequest request = requestAttributes.getRequest(); //原请求
//获取请求头
String header = request.getHeader("Authorization");
requestTemplate.header("Authorization",header); //保存到转发后的header中
}
}
};
}
}
性能优化,使用httpclient连接池替代默认连接
1. 引入依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
2. 配置 yml 配置文件(日志级别<=BASIC)
feign:
httpclient:
enabled: true # httpclient开关
max-connections: 200 #最大链接数(默认)
max-connections-per-route: 50 #单路径最大连接数(默认)
设置日志级别(yml配置文件)
feign 一共有 NONE(不打印日志)、BASIC、HEADERS、FULL(打印所有日志信息) 四个日志级别
feign:
client:
config:
default: # Default表示全局配置 ,如果是服务名称表示某个微服务配置
loggerLevel: FULL
# 设置日志级别为 debug
logging:
level:
root: debug
nacos与openfeign使用
nacos中ribbon会造成loadbalanc包失效(nacos与openfeign使用)
<!-- nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>

