当前位置: 首页 > 知识库问答 >
问题:

API网关中的数据聚合-Zuul

祖波光
2023-03-14

我正在寻找一种在API网关中提供某种数据聚合的解决方案。我正在使用SpringCloudNetflixZuul作为API网关。我使用SpringBoot创建了3个微服务-

Catalog - All products 
DeviceInfo - a particular product detail 
Inventory - product stock

这里是Zuul配置-

zuul.routes.deviceInfo.path=/device/deviceInfo/**
zuul.routes.deviceInfo.url=http://localhost:9002/getDeviceInfo

zuul.routes.catalog.path=/device/all/**
zuul.routes.catalog.url=http://localhost:9001/getProductCatalog

zuul.routes.inventory.path=/device/stock/**
zuul.routes.inventory.url=http://localhost:9003/getInventory

ribbon.eureka.enabled=false

server.port=8080

在产品详细信息页面中,我需要打两个电话-

http://localhost:8080/device/deviceInfo/ - for product details
http://localhost:8080/device/stock/ - for stock details

有没有办法对API网关进行一次调用,将上述两次调用的结果结合起来?这两个调用都给出JSON作为响应。

共有2个答案

窦伟
2023-03-14

我认为最初的问题是关于这里记录的API组合模式。API组合是微服务生态系统中常用的模式,在微服务生态系统中,来自客户端的单个调用可能导致对多个微服务的调用,并返回整合结果。在API网关中执行此操作是一种相当常见的做法,本文也对此进行了说明。

不久前,我自己也在zuul那里寻找这个解决方案,但没有找到。也许从那时起情况已经改变了。

濮俭
2023-03-14

您可以使用聚合器微服务模式,但不能在ZUUL中使用。将Zuul保持为无状态网关。聚合器微服务应该有这样的客户端代码

public String getProductTitle() {
    String response = null;
    try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
      HttpGet httpGet = new HttpGet("http://localhost:51515/information");
      try (CloseableHttpResponse httpResponse = httpClient.execute(httpGet)) {
        response = EntityUtils.toString(httpResponse.getEntity());
      }
    } catch (IOException e) {
      LOGGER.error("Exception caught.", e);
    }
    return response;
  }
}

请看一看https://github.com/iluwatar/java-design-patterns/tree/master/aggregator-microservices

 类似资料:
  • 我正在研究微服务架构,我想聚合来自两个微服务的数据。 例如,前台调用API网关,API网关调用两个微服务客户和订单微服务。客户微服务返回客户详细信息,订单微服务按客户返回所有订购的产品。 这是API网关使用Ocelot或Azure API Management从两个微服务聚合后返回的格式。 格式1 我想要的格式是格式 2。 格式2 第二种格式可以使用Ocelot实现,但数据的合并基于网关上的id,

  • 使用不同的聚合函数查看数值非常有用。Tableau支持许多不同的聚合类型,例如: 总和 平均 计数 唯一值 中位数 最小值 最大值 方差 总体方差 标准偏差 总体标准差 属性 维度 在Tableau中,您可以创建聚合维度和度量。每当向视图添加度量时,默认情况下会对这些度量应用聚合。使用的聚合类型取决于视图的上下文。 如果您不熟悉数据库,请参阅Tableau手册以获取这些聚合类型的详细定义。默认情况

  • 我有一个窗口化的每小时聚合的数据流。 Datastreamds=.....

  • 我正试图理解API网关和微服务聚合器模式之间的区别。 目前,从我对聚合器模式的理解来看,它是通过从各种微服务收集数据片段并返回一个聚合进行处理来实现的。 现在,API网关是聚合对单个微服务的调用的单一入口点。虽然这听起来可能与聚合器模式非常相似,但也有一些不同的特性。最重要的是,这个新服务不存储数据,而是负责API组合、请求路由和身份验证等新功能 我很想知道我的推理是否正确。 提前谢谢你!

  • 问题内容: 我试图理解这些术语的含义。我举了一些例子,例如: 汇总:Facebook 有一个 用户 组成:facebook 中的 每个用户 都有一个 会话。 协会:人们 使用 浏览器 但是我对 具有 和 使用我的 示例感到困惑。为什么不能是用户 使用 Facebook帐户或Facebook 使用 会话来认证用户? 就OOP而言,这是错误的吗?我在哪里想念这个概念? 问题答案: 该 使用 关系意味着

  • 因此,我对UML图中的关联、聚合和组合有一些疑问。以下是一些场景: > 产品评审对产品评审的评级组成。这意味着对于每一个产品评审等级必须有产品评审?如果产品评审不存在,评审评级就没有意义。 客户NRIC协助推车和订货。我们不能使用聚合,因为如果客户不存在,购物车和订单也不存在。 有人能帮我检查一下我的关系是否正确吗?因为我对聚合和关联有点困惑,所以用关联来链接所有的表是好的吗。我不知道什么时候该用