设为首页 加入收藏

TOP

Spring Cloud OpenFeign 的使用及踩坑指南(一)
2023-08-06 07:49:34 】 浏览:82
Tags:Spring Cloud OpenFeign

目录

Feign 和OpenFeign

Feign

Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。

Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务Feign本身不支持Spring MVC的注解,它有一套自己的注解

OpenFeign

OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等,是一个轻量级的Http封装工具对象,大大简化了Http请求,使得我们对服务的调用转换成了对本地接口方法的调用。

OpenFeign 的 @FeignClient 可以解析SpringMVC的 @RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务

openFeign的优势

  1. 集成了Ribbon的负载均衡功能
  2. 集成Hystrix的熔断器功能
  3. 支持请求压缩
  4. 大大简化了远程调用的代码,同时功能还增强啦
  5. 以更加优雅的方式编写远程调用代码,并简化重复代码

OpenFeign应用

1. 导入依赖

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

2. 使用

创建Feign接口

@FeignClient(value = "xx-template-service")//value = "xx-template-service"指定服务的名字
public interface DriverFeign {

  /** 
   * demo feign 接口
   */
  @PutMapping(value = "/driver/status")
  Driver status(String id, Integer status);
}

Feign会通过动态代理,帮我们生成实现类。

注解@FeignClient声明Feign的客户端,注解value指明服务名称接口定义的方法,采用SpringMVC的注解。Feign会根据注解帮我们生成URL地址

FeignClient 注解参数

  • name/value:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
  • contextId:指定beanID
  • url: url一般用于调试,可以手动指定@FeignClient调用的地址
  • decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
  • configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
  • fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
  • fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
  • path: 定义当前FeignClient的统一前缀

注意事项

  1. 在使用fallback、fallbackFactory属性时,需要使用@Component注解,保证fallback类被Spring容器扫描到
  2. 在使用FeignClient时,Spring会按name创建不同的ApplicationContext,通过不同的Context来隔离FeignClient的配置信息, 在使用配置类时,不能把配置类放到Spring App Component scan的路径下,否则,配置类会对所有FeignClient生效.

启用OpenFeign

我们需要在服务的启动类上开启 OpenFeign ,只需要在 **Application 启动类上添加 @EnableFeignClients即可。

3. 日志配置

logging:
  level:
    xx.template.cloud.web.service.feign.ServiceServiceFeign: debug

通过loggin.level.xx=debug来设置日志级别。然而这个对Feign客户端不会产生效果。因为@FeignClient注解修饰的客户端在被代理时,都会创建一个新的Feign.Logger实例。我们需要额外指定这个日志的级别才可以。

  /** 
   * feign 日志级别配置
   * @return 
   */
  @Bean
  public Logger.Level feignLoggerLevel(){
    return Logger.Level.FULL;
  }

或者在配置文件中配置

feign: 
  client:
    config:
      # 全局配置
      default:
        loggerLevel: full

Feign支持4种级别:
NONE:不记录任何日志,默认值
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
HEADERS:在BASIC基础上,额外记录了请求和响应的头信息
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据

4. 数据压缩

用户在网络请求过程中,如果网络不佳、传输数据过大,会造成体验差的问题,我们需要将传输数据压缩提升体验。SpringCloud OpenFeign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。

在客户端中配置数据压缩

feign:
  compression:
    request:
     enabled: true # 开启请求压缩
    response:
     enabled: true # 开启响应压缩

也可以对请求的数据类型,以及触发压缩的大小下限进行设置

feign:
  compression:
    request:
      enabled: true # 开启请求压缩
      mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
      min-request-size: 2048 # 设置触发压缩的大小下限
      #以上数据类型,压缩大小下限均为默认值
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇《深入理解Java虚拟机》读书笔记.. 下一篇windows相关DOS命令简介与基操

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目