14.Spring-Cloud-Feign中请求压缩配置和日志配置
请求压缩配置
Spring Cloud feign支持对请求与响应进行GZIP压缩,以减少通信中的性能损耗,主要是在spring-cloud-netflix-core.jar文件中.
默认对请求和相应压缩是禁用的,从
org.springframework.cloud.netflix.feign.encoding.FeignContentGzipEncodingAutoConfiguration类中可以看到请求压缩是禁用的
源码:
@ConditionalOnProperty(value = "feign.compression.request.enabled", matchIfMissing = false)
org.springframework.cloud.netflix.feign.encoding.FeignAcceptGzipEncodingAutoConfiguration.class类中可以看到响应压缩是禁用的
源码:
@ConditionalOnProperty(value = "feign.compression.response.enabled", matchIfMissing = false)
org.springframework.cloud.netflix.feign.encoding.FeignClientEncodingProperties类中配置了一些默认的编码属性
源码:
@ConfigurationProperties("feign.compression.request")
public class FeignClientEncodingProperties {
/**
* The list of supported mime types.
*/
private String[] mimeTypes = new String[]{"text/xml", "application/xml", "application/json"};
/**
* The minimum threshold content size.
*/
private int minRequestSize = 2048;
}
在application.properties中自定义请求压缩
日志配置
在构建@FeignClient注解修饰的服务客户端时,会为一个客户端都创建一个feign.Logger实例,可以利用该日志对象的DEBUG模式来分析Feign的请求细节。具体配置在application.properties中配置:
logging.level.<FeignClient>=DEBUG开启指定Feign客户端的DEBUG模式日志;
<FeignClient>为Feign客户端定义接口的完整路径
如:
logging.level.com.niugang.service.HelloService=DEBUG
只添加上面配置还无法实现对DEBUG日志的输出,以因为Feign客户端默认的logger.level对象定义为none级别,所以不会记录feign调用过程中的信息。
feign中日志级别
/**
* Controls the level of logging.
*/
public enum Level {
/**
* No logging.不记录日志
*/
NONE,
/**
*只记录请求方法和URL,以及响应状态代码和执行时间。
* Log only the request method and URL and the response status code and execution time.
*/
BASIC,
/**
*记录请求和响应头基本信息。
* Log the basic information along with request and response headers.
*/
HEADERS,
/**
*记录请求和响应的标头、正文和元数据
* Log the headers, body, and metadata for both requests and responses.
*/
FULL
}
创建方式一:在启动类上配置
测试
输入:http://localhost:9001/feign-consumer1/zhangsan
输入:http://localhost:9001/feign-consumer2/zhangsan/15094031789
创建方式二:定义配置类
1.创建专门的配置类
2.在服务调用接口上进行绑定
//value:调用服务的名
//fallback:配置服务降级类
//configuration:定制客户端的自定义@configuration。可以包含对组成客户端的片段的重写@Bean定义
@FeignClient(value="service-provide",fallback=ServiceProvideFallBack.class,configuration=FeignLoggerConfig.class)
测试效果和在启动类上配置效果一样
微信公众号