netflix.feign 和 openfeign 之间的区别

介绍

我最近使用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/tree/master/samples/client/petstore/java/feignhttps://github.com/swagger-api/swagger-codegen

但是,当我仔细观察进口产品时,我注意到以下内容:

import feign.Feign;

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

此外,我注意到两者都使用功能区(如果可用),但是Netflix的符号要干净得多,在后台发生了很多事情。例如,注释类javadoc声明:@FeignClient

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

然而,在文档(https://github.com/OpenFeign/feign)中,我看到:Feign.feign

RibbonClient 覆盖了 Feign 客户端的 URL 解析,增加了 Ribbon 提供的智能路由和复原功能。

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

> MyService api =
> Feign.builder().client(RibbonClient.create()).target(MyService.class,
> "https://myAppProd");

所以我的问题是:

  1. 两者之间的历史/关系和差异是什么?
  2. 每种方法的优缺点是什么?

他们是完全不同的项目,没有关系,还是netflix只是分叉/利用OpenFeign并将其修改为在其集成的云解决方案中?从本质上讲,netflix是否刚刚从开源项目中收购并集成了不同的技术,如Discovery,ribbon和假装?


答案 1

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

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

“开放假”是新的项目名称。这是同一个项目,但被移动到不同的 git 存储库并获得了新的 group-id。其版本从 9.0.0 开始。

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

请参阅此 github 问题,了解所发生事件的简要历史。最值得注意的是,你会发现Netflix内部不再使用Feign。:^o


答案 2

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

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

文档中

Feign 是一个声明式 Web 服务客户端。Spring Cloud增加了对Spring MVC注释的支持,并支持使用与Spring Web中默认使用的相同的HttpMessageConverters。Spring Cloud集成了Ribbon和Eureka,在使用Feiign时提供负载均衡的http客户端。

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

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

请参阅源代码


推荐