SpringCloud Feign组件使用

Feign介绍

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

基于Feign的服务调用

引入依赖

在服务消费者 shop_service_order 添加Fegin依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

启动类添加Feign的支持

在shop_service_order的启动类上添加@EnableFeignClients注解开启Spring Cloud Feign的支持功能

Feign接口创建

在shop_service_order中创建一个ProductFeginClientFeign接口,此接口是使用Feign中调用微服务的核心接口

//指定需要调用的微服务名称
@FeignClient(name = "shop-service-product")
public interface PeoductFeignClient {
    
    //调用微服务的请求路径(这里调用的是商品微服务的查询方法)
    @RequestMapping(value = "/product/{id}",method = RequestMethod.GET)
    public Product findById(@PathVariable("id") Long id);
    
}

Feign接口的使用

在Controller中注入ProductFeginClient接口,并在下单接口中调用

@RestController
@RequestMapping("/order")
public class OrderController {
    
    @Autowired
    private ProductFeignClient productFeignClient;

    @RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
    public Product order(@PathVariable Long id) {
        return productFeignClient.findById(id);
    }
}

Feign和Ribbon的关系

Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置

Feign 是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的 方式, 只需要创建一个接口,然后在上面添加注解即可,将需要调用的其他服务的方法定义成抽象方 法即可, 不需要自己构建http请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常简单

负载均衡

Feign中本身已经集成了Ribbon依赖和自动配置,因此我们不需要额外引入依赖,也不需要再注册 RestTemplate 对象。另外我们可以向上一篇文章中写的那样去配置Ribbon的负载均衡,可以通过 ribbon.xx 来进 行全局配置。也可以通过 服务名.ribbon.xx 来对指定服务配置

Feign的配置

从Spring Cloud Edgware开始,Feign支持使用属性自定义Feign。对于一个指定名称的Feign Client(例如该Feign Client的名称为 feignName ),Feign支持如下配置项:

feign:
  client:
    config:
      feignName: #定义FeignClient的名称
        connectTimeout: 5000 #建立链接的超时时长
        readTimeout: 5000 #读取超时时长
        loggerLevel: full #Fegin的日志级别
        errorDecoder: com.example.SimpleErrorDecoder #Feign的错误解码器
        retryer: com.example.SimpleRetryer #配置重试
        requestInterceptors: #添加请求拦截器
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        decode404: false #配置熔断不处理404异常

请求压缩

Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数 即可开启请求与响应的压缩功能,同时还可以对请求的数据类型,以及触发压缩的大小下限进行设置

feign:
  compression:
    request:
      enabled: true #开启请求压缩
      mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
      min-request-size: 2048 #设置触发压缩的大小下限
    response:
      enabled: true #开启响应压缩

日志级别

在开发或者运行阶段往往希望看到Feign请求过程的日志记录,默认情况下Feign的日志是没有开启的。 要想用属性配置方式来达到日志效果,只需在 application.yml 中添加如下内容即可:

feign:
  client:
    config:
      shop-service-product: #定义FeignClient的名称
        connectTimeout: 5000 #建立链接的超时时长
        readTimeout: 5000 #读取超时时长
        loggerLevel: full #Fegin的日志级别

logging:
  level:
    cn.nzblog.order.fegin.ProductFeginClient: debug
  • logging.level.xx: debug
    Feign日志只会对日志级别为debug的做出响应
  • feign.client.config.shop-service-product.loggerLevel
    配置Feign的日志Feign有四种日志级别

    • NONE(性能最佳,适用于生产):不记录任何日志(默认值)
    • BASIC(适用于生产环境追踪问题):仅记录请求方法、URL、响应状态代码以及执行时间
    • HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
    • FULL(比较适用于开发及测试环境定位问题)记录请求和响应的header、body和元数据。

添加新评论

评论列表