基本介绍
Feign是一个声明式WebService客户端。使用Feign能让web Service客户端更加简单。
它的使用方法是定义一个服务接口然后再上面添加注解。Feign也支持可插拔式编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以于Eureka和Ribbon组合使用以支持负载均衡
Feign旨在使编写Java Http客户端变得更加容易。
在使用Ribbon+RestTemplate,利用RestTemplate对http请求的封装处理,形成了一套模板化的调用方法,但在实际开发中,由于对服务的依赖的调用不止一处,往往一个接口会被多处调用,所以通常会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以Feign在此基础上做了进一步封装,由于他来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前是Dao接口上上面标注Mapper注解,现在是一个微服务接口上边标注一个Feign注解即可,即可完成对服务提供方的接口绑定)简化了使用SpringCloud ribbon时自动封装调用客户端的开发量。
利用Ribbon维护了Payment的服务列表,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务的调用。
openFeign的使用
启动类
@EnableFeignClients
接口层
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
@GetMapping("payment/get/{id}")
ResponseMsg<Payment> getPaymentById(@PathVariable("id") Long id);
}
注意:GetMapping必须于服务提供者保持一致
超时时间
ribbon:
#指的是建立连接所用的时间,适用于网络情况正常,两端连接所用的时间
ConnectTimeout: 5000
# 指的是连接后从服务器读取资源所用时间
ReadTimeout: 5000
日志打印
Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请i去得细节。就是对Feign接口得调用情况进行监控和输出
NONE:默认的,不显示任何日志
BASIC:仅激励请求方法、URL、响应状态码及执行时间
HEADERS:除了BASIC中定义的信息之外,还有请求和相应的头信息
FULL:除了Headers中定义的信息外,还有请求和响应的正文及元数据
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
logging:
#feign日志以什么级别监控哪个接口
level:
com.huangqh.springcloud.service.PaymentFeignService: debug