netflix.feign& openfeign

时间:2018-04-13 18:28:56

标签: java spring-cloud netflix-feign spring-cloud-feign feign

简介

我最近使用netflix假装和功能区非常有用。

这方面的一个例子是:

@FeignClient(name = "ldap-proxy")
public interface LdapProxyClient  { 
    @RequestMapping(path = "/ldap-proxy/v1/users/{userNameOrEMail}", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
    LdapUser search(@PathVariable("userNameOrEMail") String userNameOrEMail);
}

然而,在某些时候我认为不必手动编码所有这些定义(对于现有的web服务),我应该看看是否存在工具。

我偶然发现https://github.com/swagger-api/swagger-codegen,发现有一些例子可以生成客户端,例如https://github.com/swagger-api/swagger-codegen/tree/master/samples/client/petstore/java/feign

然而,一旦我仔细观察了进口产品,我注意到以下几点:

import feign.Feign;

另一方面,Netflix的开源解决方案有包名: org.springframework.cloud.netflix.feign

此外,我注意到两者都使用功能区(如果可用),但Netflix的表示法更加清晰,后台发生了很多事情。例如。 @FeignClient注释类javadoc声明:

  
      
  • 接口的注释,声明应该*创建具有该接口的REST客户端(例如,用于自动连接到另一个   零件)。如果功能区可用,它将*用于负载平衡   后端请求,并且可以使用配置负载均衡器   与@RibbonClient具有相同名称(即值)的Feign.feign   假装客户。
  •   

但是在> MyService api = > Feign.builder().client(RibbonClient.create()).target(MyService.class, > "https://myAppProd"); 文档(https://github.com/OpenFeign/feign)中,我看到了:

  

RibbonClient会覆盖Feign客户端的URL解析,添加功能区提供的智能路由和弹性功能。

     

集成要求您将功能区客户端名称作为主机传递   网址的一部分,例如myAppProd。

WebBrowserControl.Navigating

所以我的问题是:

  1. 这两者之间的历史/关系和差异是什么?
  2. 每个人的利弊是什么?
  3. 他们是完全不同的项目,没有关系,或者netflix只是分叉/利用OpenFeign并将其修改为在他们的集成云解决方案中?从本质上讲,netflix是否只是从开源项目中获取并集成了Discovery,Ribbon和feign等不同技术?

2 个答案:

答案 0 :(得分:9)

org.springframework.cloud.netflix.feignSpring Cloud Netflix项目的一部分,是Spring Cloud的一部分。

Spring Cloud使用OpenFeign。它扩展它以支持Spring MVC注释,并通过自动配置为Spring Boot应用程序提供集成,使其成为Spring环境中的一流公民。

来自documentation

  

Feign是一个声明性的Web服务客户端。 Spring Cloud增加了支持   对于Spring MVC注释和使用它   HttpMessageConverters默认在Spring Web中使用。春云   集成Ribbon和Eureka以提供负载均衡的http客户端   使用Feign时。

请注意,在文档中有一个指向OpenFeign项目的链接。

因此,如果您使用Spring Boot,那么使用Spring Cloud OpenFeign集成会更好更容易。

另见the source code

答案 1 :(得分:8)

“ Netflix假装”是项目的名称。最新版本(下面的依赖关系)日期为2016年7月。

compile group: 'com.netflix.feign', name: 'feign-core', version:'8.18.0'   // OLD

“打开假装”是项目的名称。这是同一项目,但是被移到了另一个git repo并获得了一个新的组ID。其版本从9.0.0开始。

compile group: 'io.github.openfeign', name: 'feign-core', version: '10.0.1'   // NEW

请参阅this github issue,以了解发生的情况。最引人注目的是,您会发现Netflix内部不再使用Feign。 :^ o