Feign

一、什么是feign

Feign是Netflix开发的声明式、模板化的HTTP客户端,Feign可帮助咱们更加便捷、优雅地调用HTTP API。spring

Spring Cloud对Feign进行了加强,使其支持Spring MVC注解,另外还整合了Ribbon和Eureka,从而使得Feign的使用更加方便api

二、Ribbon+RestTemplate进行微服务调用的缺点

ResponseEntity<List> responseEntity = restTemplate.getForEntity("http://order-service/order/queryOrdersByUserId/"+userId,List.class);ide

Ribbon进行调用微服务

@Bean性能

@LoadBalanced测试

public RestTemplate restTemplate() {编码

return new RestTemplate();url

}spa

缺点:咱们编码的请求的url比较简单,若是系统很复杂,则须要拼接不少参数,并且代码看起来不是很美观,不利于理解代码的含义,给别人维护形成必定的困扰.net

三、feign的搭建

 

1)服务消费方加入feign依赖和提供方的api依赖

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

 

<dependency>    

<groupId>com.######.fc</groupId>    

<artifactId>fc-customer-service-api</artifactId>    

<version>1.0.0</version>

</dependency>

 

2)新建remote.service包,用于微服务调用

新建接口,并继承依赖的api接口(不用再写一遍调用的方法)

增长@FeignClient(value = "fc-process-service")注解

3)主启动类增长注解

四、feign的日志级别

1)、NONE【性能最佳,适用于生产】:不记录任何日志(默认值)

public class MsProviderCustomCfg {

@Bean

public Logger.Level feignLoggerLevel() {

return Logger.Level.NONE;

}

}

2)、HEADERS:记录BASIC级别的基础上,记录请求和响应的header

public class MsProviderCustomCfg {

@Bean

public Logger.Level feignLoggerLevel() {

return Logger.Level.HEADERS;

}

}

3)、FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据

public class MsProviderCustomCfg {

@Bean

public Logger.Level feignLoggerLevel() {

return Logger.Level.FULL;

}

}

4)、BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间

public class MsProviderCustomCfg {

@Bean

public Logger.Level feignLoggerLevel() {

return Logger.Level.BASIC;

}

}

五、两种定义日志级别的方法

1)配置类

public class MsProviderCustomCfg {

@Bean

public Logger.Level feignLoggerLevel() {

return Logger.Level.BASIC;

}

}

@FeignClient(name = "ms-provider-order-feign-custom",configuration = MsProviderCustomCfg.class,path = "/order")

public interface MsCustomFeignOrderApi {

@RequestLine("GET /queryOrdersByUserId/{userId}")

public List<OrderVo> queryOrdersByUserId(@Param("userId") Integer userId);

}

2)yml文件中配置

feign.client.config.ms-provider-order-feign-custom.loggerLevel=full

相关文章
相关标签/搜索