Feign学习记录
简介:声明式rest客户端,提供了http请求的模板,通过编写简单的接口和插入注解,就可以定义好http请求的参数格式地址等信息。可以和Eureka和Ribbon组合使用以支持负载均衡。
一、集成Feign
1、引入pom依赖
<!--引入Feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
2、在启动类上添加注解 EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
//如果Feign和接口定义不在同一个包下面,需要指定扫描的包。
@EnableFeignClients(basePackages = "com.studycloud.microservicesimpleconsumeuser.client")
public class MicroserviceSimpleConsumeUserApplication {
public static void main(String[] args) {
SpringApplication.run(MicroserviceSimpleConsumeUserApplication.class, args);
}
@Bean
@LoadBalanced//这个注解会自动构造LoadBalancerClient接口的实现类并注册•到ioc
public RestTemplate getR(){
return new RestTemplate();
}
}
3、在刚才的启动类注解EnableFeignClients对应的包下面编写client接口
//value代表服务实例信息,
//path代表该服务对应的controller的RequestMapping地址
@FeignClient(value = "LFQ-PROVIDE-8081",path = "/providedata")
public interface ProvideClient {
//这里的接口指的是服务提供者所提供的接口服务
@RequestMapping("getUser")
UserInfo getUser(String name);
@RequestMapping("getData")
public String getData();
}
4、调用接口成功,同时也实现了负载
//注入client Bean
@Autowired
private ProvideClient provideClient;
@RequestMapping("testFeign_1")
public String testFeign_1(){
return provideClient.getData();
}
二、日志配置
1、编写日志类,Logger.Level有四种日志级别,如下代码清单:
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignConfiguraion {
@Bean
Logger.Level frignLoggerLevel(){
//NONE, 不输出日志
//BASIC, 只输出请求方法的URL和响应的状态码以及接口执行的时间
//HEADERS, 将BASIC信息和请求头信息输出
//FULL; 输出完整的请求信息
return Logger.Level.FULL;
}
}
2、在client中指定日志配置信息 configuration = FeignConfiguraion.class
//value 代表服务实例信息,
//path 代表该服务对应的controller的RequestMapping地址
//configuration 日志配置类
@FeignClient(value = "LFQ-PROVIDE-8081",path = "/providedata",configuration = FeignConfiguraion.class)
public interface ProvideClient {
@RequestMapping("getUser")
UserInfo getUser(String name);
@RequestMapping("getData")
public String getData();
}
3、在配置文件中配置日志的级别才能正常输出日志信息,配置如下:
logging:
level:
##表示client层
com.studycloud.microservicesimpleconsumeuser.client: debug
4、调用client接口,查看日志如下:
三、Basic认证配置
自定义属于自己的认证方式,其实就是定义一个拦截器,在请求接口之前做认证操作,往请求头里面设置认证之后的信息,通过实现RequestInterceptor接口,重写apply方法,这样当Feign去请求接口的时候每次都会县进入apply方法,如下代码清单所示:
public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
//在这里做自己的认证业务即可
System.out.println(1);
}
}
在之前的FeignConfigurtion中配置认证拦截器,请自行测试
@Bean
public FeignBasicAuthRequestInterceptor basicAuthRequestInterceptor(){
return new FeignBasicAuthRequestInterceptor();
}
四、Feign配置超时时间
在之前的FeignConfigurtion中配置
//Feign配置超时时间
@Bean
public Request.Options options(){
// 第一个参数:配置连接超时时间 默认是10 * 1000
// 第二个参数:读取超时时间 默认是 60 * 1000
return new Request.Options(5000,10000);
}
五、客户端组件配置
Feign中默认使用HttpClient配置来进行接口调用,可以集成别的组件替换HttpClient,配置Okhttp只需要引入Okhttp依赖,然后修改配置文件,禁用htpclient,开启okhttp,
<!--引入okhttp-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
##配置使用okhttp
feign:
##禁用httpclient
httpclient:
enable: false
##配置使用okhttp
okhttp:
enable: true
六、GZIP压缩配置
feign:
##禁用httpclient
httpclient:
enable: false
##配置使用okhttp
okhttp:
enable: true
##Feign压缩配置,压缩数据,减少通信中的性能损耗,默认是禁止的
compression:
request:
##启用压缩
enable: true
##压缩的类型
mime-types: text/xml,application/xml,application/json
##最小压缩值的标准
min-request-size: 2048
##启用压缩
response: true