.NET .NET Aspire 服务发现

在本文中,你将了解服务发现在 .NET.NET Aspire 项目中的工作原理。 .NET .NET Aspire 包括用于在开发和测试时配置服务发现的功能。 服务发现功能通过将 .NET.NET Aspire AppHost 项目中的 基于配置的终结点解析程序 所期望的格式配置,应用到添加到应用程序模型的各个服务项目中,实现其功能。 有关详细信息,请参阅 中的 服务发现。

通过引用进行隐式服务发现

仅为给定项目引用的服务添加服务发现配置。 例如,请考虑以下 AppHost 程序:

var builder = DistributedApplication.CreateBuilder(args);

var catalog = builder.AddProject<Projects.CatalogService>("catalog");
var basket = builder.AddProject<Projects.BasketService>("basket");

var frontend = builder.AddProject<Projects.MyFrontend>("frontend")
                      .WithReference(basket)
                      .WithReference(catalog);

在前面的示例中,前端 项目引用了 目录 项目和 购物篮 项目。 这两个 WithReference 调用指示 .NET.NET Aspire 项目将所引用项目的服务发现信息 (目录购物车) 传递到 前端 项目中。

命名端点

某些服务公开多个命名端点。 命名终结点可以通过在 HTTP 请求 URI 的主机部分中指定终结点名称来解析,格式为 scheme://_endpointName.serviceName。 例如,如果名为“basket”的服务公开名为“dashboard”的终结点,则可以使用 URI scheme+http://_dashboard.basket 来指定此终结点,例如:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https+http://basket"));

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https+http://_dashboard.basket"));

在前面的示例中,将添加两个 HttpClient 类,一个用于核心篮子服务,一个用于篮子服务的仪表板。

使用配置命名端点

使用基于配置的终结点解析程序时,可以在配置中通过将终结点值加上 _endpointName.前缀来指定命名终结点,其中 endpointName 表示终结点名称。 例如,请考虑此 appsettings.json 配置,该配置定义了默认终结点(无名称)和名为“dashboard”的终结点:

{
  "Services": {
    "basket":
      "https": "https://10.2.3.4:8080", /* the https endpoint, requested via https://basket */
      "dashboard": "https://10.2.3.4:9999" /* the "dashboard" endpoint, requested via https://_dashboard.basket */
    }
  }
}

在前面的 JSON:

  • 解析 https://basket 时的默认终结点是 10.2.3.4:8080
  • 通过 https://_dashboard.basket 解析的“仪表板”端点为 10.2.3.4:9999

.NET .NET Aspire 中的命名终结点

var basket = builder.AddProject<Projects.BasketService>("basket")
    .WithHttpsEndpoint(hostPort: 9999, name: "dashboard");

使用 DNS SRV Kubernetes 中的命名终结点

部署到 Kubernetes时,DNS SRV 服务终结点解析程序可用于解析命名终结点。 例如,以下资源定义将导致为名为“default”的终结点和名为“dashboard”的终结点创建 DNS SRV 记录,这两者都位于名为“basket”的服务上。

apiVersion: v1
kind: Service
metadata:
  name: basket
spec:
  selector:
    name: basket-service
  clusterIP: None
  ports:
  - name: default
    port: 8080
  - name: dashboard
    port: 9999

若要将服务配置为解析“购物篮”服务上的“仪表板”终结点,请将 DNS SRV 服务终结点解析程序添加到主机生成器,如下所示:

builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();

有关详细信息,请参阅 AddServiceDiscoveryCoreAddDnsSrvServiceEndpointProvider

特殊端口名称“default”用于指定默认终结点,使用 URI https://basket解析。

与前面的示例一样,向篮子服务的 HttpClient 中添加服务发现机制:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https://basket"));

同样,可以按如下方式定位“仪表板”端点:

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https://_dashboard.basket"));

另请参阅