假设有 2 个后端服务:
- 产品服务(获取产品信息),
- 库存服务(获取可用数量)。
除此之外,还有一个前端 Web 应用程序来显示产品详细信息。
我在互联网上看到的所有示例都是关于前端和 API 网关是同一个应用程序并使用 Zuul 作为反向代理。
我的理解是 API 网关应该是一个单独的应用程序(层),前端应用程序应该使用它来调用后端服务。
那么Zuul有什么好处呢?为什么不直接使用 feign 为这两种服务创建客户端并为前端应用程序提供端点?
假设有 2 个后端服务:
除此之外,还有一个前端 Web 应用程序来显示产品详细信息。
我在互联网上看到的所有示例都是关于前端和 API 网关是同一个应用程序并使用 Zuul 作为反向代理。
我的理解是 API 网关应该是一个单独的应用程序(层),前端应用程序应该使用它来调用后端服务。
那么Zuul有什么好处呢?为什么不直接使用 feign 为这两种服务创建客户端并为前端应用程序提供端点?
Feign 客户端和 Zuul 是 Spring Cloud Netflix 中两个完全不同的组件。
Feign Client 是一个美化的 REST 模板,添加了 Retry、Fallbacks 等。你可以按照 Apache HttpClient 的思路思考
另一方面,Zuul 是代理/反向代理/网关。通常,网关应该是后端服务的公共入口点。它应该是一个单独的层,允许您添加常见的功能,如身份验证、审计、日志记录等。正如 @ootero 提到的,您可以轻松地在 Zuul 中添加过滤器来实现此功能。
Zuul
作为Proxy
服务器,不仅路由请求而且Zuul
过滤器也可用于处理横切关注点,例如:
您提到Feign
客户,这将(据我所知)与Java
基于 - 的前端应用程序一起工作,如果前端应用程序是使用Angular
or开发的React
呢?