介绍
我最近使用了 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");
所以我的问题是:
- 两者的历史/关系和区别是什么?
- 各自的优缺点是什么?
他们是完全不同的项目,没有关系,还是 netflix 只是分叉/利用 OpenFeign 并将其修改为在他们的集成云解决方案中?本质上,Netflix 是否只是从开源项目中获取并整合了 Discovery、ribbon 和 feign 等不同的技术?