【问题标题】:Differences between netflix.feign & openfeignnetflix.feign 和 openfeign 的区别
【发布时间】:2018-09-24 04:15:14
【问题描述】:

简介

我最近使用了 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 文档中(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 等不同的技术?

【问题讨论】:

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


    【解决方案1】:

    “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
    

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

    【讨论】:

    • 是的,我仍然很难过 FeignTown 从未成为一件事:/
    • api group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '2.1.2.RELEASE' 那么它怎么也存在于spring cloud
    • @PSatishPatro Spring 框架封装了几个库和其他框架,使它们更易于在 Spring Boot 应用程序中管理和使用(主要是利用 Spring 的 IoC)。所以,Spring Cloud Openfeign 是对 openfeign 的封装。同样,您可以使用 Kafka 的生产者/消费者 API 或 Spring Kafka 直接使用 Kafka。
    【解决方案2】:

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

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

    来自documentation

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

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

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

    另见the source code

    【讨论】:

    • Spring 集成是,与 spring 的集成,建立在 openfeign 之上。 OpenFeign 是从 netflix 转移过来的,所以它是同一个项目,具有新的名称和 groupId 和 artifact id。
    • 这里是两个项目的 repos:Spring-CloudOpenFeign
    猜你喜欢
    • 2019-09-20
    • 2022-12-10
    • 2020-02-18
    • 2023-01-19
    • 2019-10-04
    • 2013-08-07
    • 2011-10-20
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多