Version: Next

OpenFeign

声明式远程服务调用

  • Feign 是一个声明式 WebService 客户端,使用 Feign 可以让编写 Web Service 客户端更加简单
  • 使用方法:定义一个服务器接口,然后在上面添加注解
  • Feign 支持可插拔式编码器和解码器
  • Spring CloudFeign 进行了封装,使其支持 Spring MVC 标准注解和 HttpMessageConverters,形成 OpenFeign
  • Feign 可以与 EurekaRibbon 组合使用以支持负载均衡

Feign 能做什么

Feign 能做什么

  • 目的是使编写 Java Http 客户端变得更容易
  • Ribbon + RestTemplate:利用 RestTemplate 对 HTTP 请求的封装处理,形成了一套模块化的调用方法,但是实际开发中,由于对服务依赖的调用不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用
  • Feign 在上述模式的基础上进一步封装,由它来帮助开发者定义和实现依赖服务接口的定义
  • 只需创建一个接口,并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用 Ribbon 时,自动封装服务调用客户端的开发量

Feign 集成了 Ribbon

  • 利用 Ribbon 维护了 Payment 的服务列表信息,并且通过轮询实现了客户端的负载均衡
  • Ribbon 不同的是:通过 Feign 只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用

Feign 与 OpenFeign 的区别

FeignOpenFeign

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

Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务
Spring Cloud 在 Feign 的基础上支持了 Spring MVC 的注解

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