用于复合 API 调用的 Spring Cloud Zuul?

Posted

技术标签:

【中文标题】用于复合 API 调用的 Spring Cloud Zuul?【英文标题】:Spring Cloud Zuul for composite API calls? 【发布时间】:2019-08-31 15:25:57 【问题描述】:

我开始构建一个微服务 API 网关,我正在使用 Spring Cloud Zuul 来帮助我进行路由。但是对 Gateway API 的某些调用需要对不同服务的多个请求。

假设我有 2 项服务:订单详情服务和送货服务。我想要一个网关端点 GET /orders/orderId 调用订单详细信息服务,然后调用交付服务并将两者结合起来返回完整的订单详细信息和交付。这是否可以通过 Zuul 的路由(也许是过滤器?)或者我应该使用诸如 RestTemplate 之类的东西来手工制作这些(专门为这些类型的请求创建一个控制器)来进行调用?

【问题讨论】:

可以使用Zuul路由过滤器,见cloud.spring.io/spring-cloud-netflix/multi/… 【参考方案1】:

您可以避免这种复杂性,并将您的Gateway 请求转发到Order service 进行订购,而不是将HTTP 请求从Order service 发送到Delivery service 进行交付。从本质上讲,这些实体就是这样工作的。而且不用担心速度,它非常快。

首先,就您而言,如果您想获取订单详细信息和交货详细信息,则应该以相同的方式进行。也许甚至您的订单服务也应该在其数据库中保留一些交付细节。我们就是这样做的,你应该避免冗余数据,但有时它是有意义的。

这是下订单的图表:

有意义吗?

【讨论】:

是的,这是我脑海中浮现的第一个想法,但我不希望这些服务像这样相互交谈。我希望他们分开。 为什么不呢?我有大约 40 个服务,它们通过 HTTP 或 Kafka 流进行通信。这是正常的事情,他们在同一个网络中,而且速度很快。 @D.Tomov

以上是关于用于复合 API 调用的 Spring Cloud Zuul?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 API Gateway Spring Cloud 调用实际服务

spring cloud深入学习-----服务网关zuul

如何将 Spring Cloud Config 与 Git 和 Vault 复合环境存储库一起使用?

Spring Cloud中优雅的使用Feign调用接口

Spring Cloud调用接口过程

开启springcloud全家桶4:极简API调用方式 Spring Cloud Feign 总结