Feign 配置与拦截器
约 478 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Spring Cloud › 服务调用
Feign 日志
logging:
level:
com.shop.cloud.feign: DEBUG # 只打印 Feign 包的日志@Configuration
public class FeignConfig {
@Bean
public Logger.Level feignLoggerLevel() {
// NONE:不记录(默认)
// BASIC:只记录 Method + URL + 状态码 + 耗时
// HEADERS:BASIC + 请求响应头
// FULL:全部(请求响应头 + 体)
return Logger.Level.FULL;
}
}# 或者通过配置为指定 Feign 设置日志
feign:
client:
config:
user-service: # 服务名
loggerLevel: basic
product-service:
loggerLevel: fullFeign 拦截器
拦截器在每次 Feign 调用前执行,适合统一添加 Header。
Token 透传
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// 从当前请求上下文获取 Token
ServletRequestAttributes attrs = (ServletRequestAttributes)
RequestContextHolder.getRequestAttributes();
if (attrs != null) {
HttpServletRequest request = attrs.getRequest();
String token = request.getHeader("Authorization");
if (token != null) {
template.header("Authorization", token);
}
}
// 添加 TraceId(链路追踪用)
template.header("X-Trace-Id", UUID.randomUUID().toString().substring(0, 8));
}
}全局拦截器配置
@Configuration
public class FeignGlobalConfig {
@Bean
public RequestInterceptor requestInterceptor() {
return template -> {
template.header("X-Request-Source", "gateway");
template.header("X-Internal-Token", "internal-secret-key");
};
}
}超时配置
feign:
client:
config:
default: # 全局超时
connectTimeout: 5000
readTimeout: 10000
user-service: # 单独配置
connectTimeout: 3000
readTimeout: 5000自定义 ErrorDecoder
@Component
public class FeignErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
// 根据状态码返回自定义异常
return switch (response.status()) {
case 400 -> new BadRequestException("请求参数错误");
case 404 -> new ResourceNotFoundException("资源不存在");
case 500 -> new ServiceException("服务内部错误");
default -> new RuntimeException("Feign 调用失败: " + response.status());
};
}
}配置文件方式总结
feign:
client:
config:
default:
loggerLevel: basic
connectTimeout: 5000
readTimeout: 10000
requestInterceptors:
- com.shop.cloud.feign.FeignRequestInterceptor
user-service:
connectTimeout: 3000
compression:
request:
enabled: true
mime-types: application/json
min-request-size: 2048
response:
enabled: true小结
- Feign 日志:开发用
FULL,生产用BASIC或NONE。 RequestInterceptor:统一添加 Token / TraceId / 签名,是微服务调用的标准实践。- 超时配置:单服务与全局可单独控制。
ErrorDecoder:解析 HTTP 状态码为业务异常。- Gzip 压缩启用可减少网络传输量。
