Feign

作者: 乌鲁木齐001号程序员 | 来源:发表于2020-07-09 19:42 被阅读0次

Feign | 简介

  • Feign 是一个非常好用的 HTTP 客户端;
  • Feign 很大程度上简化了 HTTP 调用的方式;
  • Feign 很好的弥补了 Spring Cloud 的 HTTP 调用缺陷;
Feign 能干什么
  • Feign 包含了多种 HTTP 的调用形式
    • SpringMVC:
      • 支持:@RequestMapping, @RequestParam, @RequestPathVariable, @RequestHeader, @RequestBody
      • 不支持:@GetMethod, @PostMethod 等;
  • Feign 可以整合 Ribbon 和 Hystrix;
  • Feign 提供了多种 HTTP 底层支持,比如 Apache HTTP Client、OkHttpClient 等;
Feign | 特性
  • Feign 实现了可插拔的注解支持,包括 Feign 和 JAX-RS 注解;
  • Feign 支持可插拔的 HTTP 编码器和解码器;
  • Feign 支持 HTTP 请求和响应的压缩;

Feign | 相关问题

为什么 Feign 的使用,只需要定义接口就行?
  • 底层使用动态代理实现了接口;
Feign 是如何支持在定义接口的时候使用 SpringMVC 的注解的?
  • Contract 的默认实现是 SpringMvcContract;
  • Feign 还支持其他的 Contract 的实现,但是都不如 SpringMvcContract 好用;

Feign | 整合 Ribbon

  • @FeignClient 中的 name 填服务名,然后 url 不填,就算是整合了 Ribbon 了;
  • Eureka Client 的依赖中就有了 Ribbon 的依赖了;

Feign | 整合 Hystrix

  • application.yml;
feign:
  hystrix:
    enabled: true
  • @FeignClient 中指定 fallback 或 fallbackFactory参数;
  • 实现用于 Feign 调用的降级版接口实现,或 FallbackFactory 实现;

Feign | HTTP 性能优化

更换为 Apache HTTP Client

Feign 默认使用的是 JDK 自带的 HTTP 方式,这个东西连接池也没有,连接速率也不行;Feign 最大的优化点就是更换 HTTP 底层实现,Apache HTTP Client 是公认的最好的 HTTP 客户端实现;

  • pom 依赖;
  • application.yml;
解压缩

Feign 可以支持 Gzip 的请求解压缩;解压缩是一把双刃剑,谨慎使用;

  • application.yml

Feign | API 继承 | backend-api

  • 微服务的目标是大量复用,Feign 会导致重复工作量,比如下游服务的参数变更,所有上游服务的调用都要修改代码;
  • Feign 提供了继承特性帮助我们解决这个问题;
  • Feign 的接口继承最多只能有一层,切记多继承,虽然 Java 的接口继承可以多继承;
  • 工程实践中,都会有一个 API 模块 backend-api,其中引入了 Feign,然后每个服务提供的接口,都定义在 backend-api 模块中;
  • Consumer 在调用 Provider 提供的服务时,直接继承 backend-api 中的接口,然后加上 @FeignClient 注解;

Feign | 整合进 Provider 和 Consumer

  • Provider 和 Consumer 的启动类上都要加注解 @EnableFeignClients;
  • 定义接口,继承 backend-api 中的接口,然后加上 @FeignClient 注解;
  • 需要服务调用的时候,直接调用自己服务中定义的,从 backend-api 中继承来的接口;

相关文章

网友评论

      本文标题:Feign

      本文链接:https://www.haomeiwen.com/subject/ygpjcktx.html