Feign优化和配置

158 阅读1分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

本文主要介绍下在工作中使用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配置调用时日志输出

微信图片_20220112164126.png

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