1.是什么:Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可
2.怎么用(重点):微服务调用接口+@FeignClient 主启动类:@EnableFeignClients
我原先很不理解实现类是怎么创建出来的,接口上标注Component是干啥的,一般不标注在类上吗?然后底层通过dom4j+反射(默认调用空参构造函数创建对象放入IOC容器中),根据自己的测试和百度,这个@FeignClient通过动态代理的方式把实现类创建出来,并把生成的代理对象放入IOC容器中,所以这里@Component不写也可以,亲测有效!
而且只要你@FeignClient中value中的微服务提供的接口(也就是@GetMapping)和上图中的@GetMapping一样,即可调用,Feign自带负载均衡配置项(根据查看maven导入的openfeign jar包可以看出,下面有个子jar包是ribbon),@FeignClient有一步就是生成负载均衡的代理类,也就是接口的实现类。底层再根据所产生的代理类生成代理对象放入IOC容器中。
3.Feign和OpenFeign两者区别
4.OpenFeign超时控制:OpenFeign默认等待一秒钟,超过后报错
YML文件里需要开启OpenFeign客户端超时控制:
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
ConnectTimeout
指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。
ReadTimeout
指的是建立连接后从服务器读取到可用资源所用的时间。
在我们使用需要设置这两项参数的服务或程序时,应该对两项参数一起设置。 一般而言两项参数的数值可以设置成一样的,ConnectTimeout可以相对比较短,这是源于我们的网络状况一般较为稳定,连接时很少出现问题。
5.OpenFeign日志打印功能:
1)是什么:
2)日志级别:
3)配置日志bean:
package com.atguigu.springcloud.config;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
4)YML文件里需要开启日志的Feign客户端:
logging:
level:
com.atguigu.springcloud.service.PaymentFeignService: debug