.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();
有关详细信息,请参阅 AddServiceDiscoveryCore 和 AddDnsSrvServiceEndpointProvider。
特殊端口名称“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"));
另请参阅
- 在
中 服务发现 - 使用 HttpClient 类发出 HTTP 请求
- 使用 IHttpClientFactory 的