SpringCloudFeign支持对请求和响应进行gzip压缩,以此来提高通信效率。
yml文件配置
eign:
compression:
request:
enabled: true
mime-types: text/xml,application/xml,application/json # 配置压缩支持的MIME TYPE
min-request-size: 2048 # 配置压缩数据大小的下限
response:
enabled: true # 配置响应GZIP压缩
开启Feign日志:
1、配置yml文件
logging:
level:
com.laiyy.gitee.feign.springcloudfeigngzip.feign.GiteeFeignClient: debug
2、覆写Feign配置
package com.itmuch.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import feign.Contract;
import feign.Logger;
@Configuration
public class Configuration1 {
//使用Feign中的注解不能使用spring的注解负责启动会报错(Feign注解:@RequestLine("GET /simple/{id}")),一般不重写这个Bean
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
//重写Feign日志级别为全部
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
3、Api接口
package com.itmuch.cloud.feign;
import org.springframework.cloud.netflix.feign.FeignClient;
import com.itmuch.cloud.entity.User;
import com.itmuch.config.Configuration1;
import feign.Param;
import feign.RequestLine;
@FeignClient(name = "microservice-provider-user", configuration = Configuration1.class)
public interface UserFeignClient {
@RequestLine("GET /simple/{id}")
public User findById(@Param("id") Long id);
}
可以看到,在控制台中打印了日志信息:证明开启成功
Feign.compression.rquest.mime-types支持的媒体类型列表默认为text/xml ,application/json和Application/xml
Min-request-size 指定请求的最小阀值,默认为2048
由于开启GZIP压缩之后,Feign之间的调用通过二进制协议进行传输,返回值需要修改为ResponseEntity<byte[]>才可以正常显示,否则会导致服务之间的调用结果乱码。
###提示:
提示1:SpringCloud Finchley.RC2版本中,开启Feign GZIP压缩时,会出现乱码,具体解决方案见:https://github.com/spring-cloud/spring-cloud-openfeign/issues/33
提示2:SpringCloud Finchley.M9版本中,开启Feign GZIP压缩会报错。具体解决方案见:https://github.com/spring-cloud/spring-cloud-openfeign/issues/14