19

介绍

我最近使用了 netflix feign 以及非常有用的功能区。

一个例子是:

@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.feign文档中(在https://github.com/OpenFeign/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 和 feign 等不同的技术?

4

2 回答 2

22

“Netflix feign”是项目名称。最后一个版本(下面的依赖项)日期为 2016 年 7 月。

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

“Open feign”是的项目名称。这是同一个项目,但被移到了不同​​的 git repo 并获得了一个新的 group-id。它的版本从 9.0.0 开始。

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

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

于 2018-09-17T15:12:55.620 回答
19

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,在使用 Feign 时提供负载均衡的 http 客户端。

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

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

另请参阅源代码

于 2018-04-13T18:53:45.417 回答