.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");
在 Kubernetes 中使用 DNS SRV 命名的端點
部署至 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"));