API网关(Zuul)合并两个微服务响应

Posted

技术标签:

【中文标题】API网关(Zuul)合并两个微服务响应【英文标题】:API gateway (Zuul) merging two micro service response 【发布时间】:2019-09-12 22:42:20 【问题描述】:

我有两个微服务,用户微服务和订单微服务。

用户微服务返回用户详情,订单微服务返回用户订单详情。

http://localhost:8080/microservice1/getuser

"id":"100","name":"test"

http://localhost:8081/microservice2/getorders

"userid":"100","orders":"orderid":"5001","productname":"mobilephone"

我使用 Spring cloud Zuul 作为 API 网关,将请求路由到每个微服务。

http://localhost:9090/api/microservice1/getuser

http://localhost:9090/api/microservice2/getorders

现在从 UI,我需要调用两个端点

他们有什么方法可以合并这两个微服务的响应吗? "id":"100","name":"test","orders":"orderid":"5001","productname":"mobilephone"

这样客户端只需要调用一个端点http://localhost:9090/api/getdetail

我们如何在 API 网关级别实现这一点?

【问题讨论】:

【参考方案1】:

Zuul 不应该用于聚合响应,您可以创建编排微服务服务并在内部使用 restTemplate 获取所有响应并根据需要聚合。

保持Zuul无状态,网关不应该有任何逻辑或有状态。

【讨论】:

感谢@vaquar Khan,在第三个编排微服务中,如何同时发送请求,我们可以使用响应式方法还是传统的方法,例如发送一个请求然后等待另一个 如果您想发送合并响应,那么如果您想将请求或响应转储到 db 或 rabbit/kafka 中,则应该使用同步调用,然后使用异步调用。如果您的基础设施支持,反应式是最好的。

以上是关于API网关(Zuul)合并两个微服务响应的主要内容,如果未能解决你的问题,请参考以下文章

微服务之API网关:kong:使用场景之路由功能

我们应该在微服务之间使用api网关(例如zuul)吗?

基于spring-cloud的微服务API网关zuul

SpringCloud:服务网关zuul-API网关

Spring Cloud 微服务二:API网关spring cloud zuul

微服务之API网关 kong 使用场景之路由功能