.Net Core 查询来自不同微服务的记录

.Net Core querying records from different microservices

我正在学习如何使用无服务器技术设计和实施微服务。我正在尝试创建自治微服务,但很难理解如何在 across/between 微服务中传输数据。我正在为我的微服务使用 .Net Core,我希望每个微服务都是通过 API 网关公开的 AWS lambda 函数。

我有以下场景:

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

ROI计算器微服务如何调用机构微服务?

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

Create .NET Core AWS lambda function

.NET 核心 AWS Lambda 微服务

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

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

我修改了serverless.template所以我们只能单独发布aws lambda函数和配置api网关。您可以在我的 github 博客 .NET Core Web API AWS Lambda Microservices Sample 上找到代码示例和详细信息。

根据您对微服务的独立性,有两种方法可以做到这一点,这可能是最佳答案:

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

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

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