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/feign 。https://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");
所以我的问题是:
- 两者之间的历史/关系和差异是什么?
- 每种方法的优缺点是什么?
他们是完全不同的项目,没有关系,还是netflix只是分叉/利用OpenFeign并将其修改为在其集成的云解决方案中?从本质上讲,netflix是否刚刚从开源项目中收购并集成了不同的技术,如Discovery,ribbon和假装?