【问题标题】:.Net Core querying records from different microservices.Net Core 查询来自不同微服务的记录
【发布时间】:2019-09-17 17:12:26
【问题描述】:

我正在学习如何使用无服务器技术设计和实施微服务。我正在尝试创建自治微服务,并且难以理解如何在微服务之间/之间进行数据通信。我正在为我的微服务使用 .Net Core,并且希望每个微服务都是通过 API Gateway 公开的 AWS lambda 函数。

我有以下场景:

  1. 机构微服务 - 返回邮政编码半径(25 英里)内的机构列表。
  2. ROI Calculator 微服务 - 接收邮政编码作为输入并调用 institution microservice 接收机构列表。对于返回的每个机构,执行一系列计算以得出 ROI 值。

ROI Calculator 微服务应该如何调用机构微服务?

【问题讨论】:

    标签: .net-core aws-lambda microservices serverless-architecture


    【解决方案1】:

    ASP.NET 核心 Web api 应用程序可以作为无服务器函数在 AWS Lambda 上发布。您可以获得常规 .NET Core 应用程序提供的所有内容,例如控制器、模型等。Amazon API 网关代理直接集成到 .NET Core api 路由系统中。因此,您的 AWS lambda 函数将为您的 .Net 核心 Web api 提供服务。您应该观看本教程以供初学者更好地理解。

    Create .NET Core AWS lambda function

    .NET 核心 AWS Lambda 微服务

    如果您使用 AWS SDK 提供的模板(ASP.NET 核心 Web api 模板)并在 AWS 上发布 .Net 核心 Web api,它将为您配置一切,包括 AWS Lambda 函数和 API 网关。因此,如果您创建了 2 个 .net 核心 web api 项目,您将拥有 2 个 web api 网关。问题是如果我们有 10 个微服务意味着我们将有 10 个 api 网关,所以理想情况下我们应该有 1 个 api 网关用于多个微服务。

    我最近在 POC 上工作,它有一个 API 网关,并且所有微服务 AWS lambda 函数都在这背后。每个微服务都有基本路径,例如购物或用户在他们的 startup.cs 中设置,这将在 apigateway 后面单独识别他们。所以微服务 1 将是 apigateway/shopping/{anything} ,另一个微服务将是 apigateway/users/{anything} ,它们都配置在 api 网关后面。 API Gateway 将向 AWS lambda 函数(.Net core web api)发送请求,该请求将由 .Net core 路由系统解析。甚至多个控制器也可以在单个 web api 项目中使用这种方式而没有问题。

    我已修改 serverless.template,因此我们只能发布 aws lambda 函数并配置 apigateway seperatley。你可以在我的 github 博客.NET Core Web API AWS Lambda Microservices Sample 上找到代码示例和详细信息。

    【讨论】:

    • 如何处理需要用户微服务使用购物微服务中的数据的场景?
    • 您将通过API网关查询数据
    【解决方案2】:

    根据您对微服务的独立性,有两种方法可能是最好的答案:

    1. 从 ROI 发起内部 HTTP 调用 -> 机构,这没问题。这样做的问题是,如果服务关闭,数据将不可用。

    2. 将计算所需的数据也存储在 ROI 服务中。这看起来很奇怪,但是曾经在机构服务中创建的数据可以通过消息总线发送到 ROI 服务,然后在需要时使用这些数据。 (但这可能不适合您的域,这取决于它需要什么信息)。

    但是,机构的计算和存储似乎可以在同一个微服务中,因此解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2021-01-10
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多