SpringCloud 微服务架构(10)- 服务调用 Feign

1 Feign

  • Feign是Netflix开发的声明式,模板化的HTTP客户端,其灵感来自Retrofit,JAXRS-2.0以及WebSocket.
  • Feign可帮助我们更加便捷,优雅的调用HTTP API。在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

SpringCloud 微服务架构(10)- 服务调用 Feign_第1张图片

1.1 Order 子模块

  • 依赖
<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
  • 调用接口
    SpringCloud 微服务架构(10)- 服务调用 Feign_第2张图片

  • 开启 Feign
    SpringCloud 微服务架构(10)- 服务调用 Feign_第3张图片

  • 调用服务
    SpringCloud 微服务架构(10)- 服务调用 Feign_第4张图片


SpringCloud 微服务架构(10)- 服务调用 Feign_第5张图片

2 Feign和Ribbon的联系

  • Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐。
  • Feign 是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其他服务的方法定义成抽象方法即可, 不需要自己构建http请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易

3 负载均衡

Feign中本身已经集成了Ribbon依赖和自动配置,因此不需要额外引入依赖,也不需要再注册RestTemplate 对象。

4 服务调用Feign高级

4.1 Feign的配置

从Spring Cloud Edgware开始,Feign支持使用属性自定义Feign。对于一个指定名称的FeignClient(例如该Feign Client的名称为feignName ),Feign支持如下配置项:
SpringCloud 微服务架构(10)- 服务调用 Feign_第6张图片

  • feignName:FeginClient的名称
  • connectTimeout : 建立链接的超时时长
  • readTimeout : 读取超时时长
  • loggerLevel: Fegin的日志级别
  • errorDecoder :Feign的错误解码器
  • retryer : 配置重试
  • requestInterceptors : 添加请求拦截器
  • decode404 : 配置熔断不处理404异常

4.2 请求压缩

Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能:
SpringCloud 微服务架构(10)- 服务调用 Feign_第7张图片
同时,我们也可以对请求的数据类型,以及触发压缩的大小下限进行设置:
SpringCloud 微服务架构(10)- 服务调用 Feign_第8张图片

4.3 日志级别

在开发或者运行阶段往往希望看到Feign请求过程的日志记录,默认情况下Feign的日志是没有开启的。要想用属性配置方式来达到日志效果,只需在application.yml 中添加如下内容即可:
SpringCloud 微服务架构(10)- 服务调用 Feign_第9张图片

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

日志级别:

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

4.4 源码分析

SpringCloud 微服务架构(10)- 服务调用 Feign_第10张图片

你可能感兴趣的:(#,16,SringCloud,微服务架构,springcloud,springboot,feign)