.NET .NET Aspire tjänsteupptäckning
I den här artikeln får du lära dig hur tjänstidentifiering fungerar i ett .NET.NET Aspire projekt. .NET .NET Aspire innehåller funktioner för att konfigurera tjänstidentifiering vid utveckling och testning. Funktionen för tjänsteupptäckt fungerar genom att tillhandahålla konfiguration i det format som förväntas av den konfigurationsbaserade endpoint-resolvern från .NET.NET Aspire AppHost-projektet till de individuella tjänstprojekten som läggs till i programmodellen. Mer information finns i serviceidentifiering i .NET.
Implicit tjänstupptäckt med referens
Konfiguration för tjänstidentifiering läggs bara till för tjänster som refereras av ett visst projekt. Tänk till exempel på följande AppHost-program:
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);
I det föregående exemplet refererar frontendprojektet till katalogprojektet och korgprojektet. De två WithReference-anropen instruerar .NET.NET Aspire-projektet att skicka information om tjänstidentifiering för de refererade projekten (katalog, och korg) till frontend-projektet.
Namngivna slutpunkter
Vissa tjänster exponerar flera namngivna slutpunkter. Namngivna slutpunkter kan lösas genom att ange slutpunktsnamnet i värddelen av HTTP-begärande-URI:n enligt formatet scheme://_endpointName.serviceName
. Om en tjänst med namnet "basket" till exempel exponerar en slutpunkt med namnet "instrumentpanel" kan URI:n https+http://_dashboard.basket
användas för att ange den här slutpunkten, till exempel:
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"));
I föregående exempel läggs två HttpClient-klasser till, en för kärnkorgtjänsten och en för korgtjänstens instrumentpanel.
Namngivna slutpunkter med konfiguration
Med den konfigurationsbaserade slutpunktsmatcharen kan namngivna slutpunkter anges i konfigurationen genom att prefixa slutpunktsvärdet med _endpointName.
, där endpointName
är slutpunktsnamnet. Tänk till exempel på den här appsettings.json konfigurationen som definierade en standardslutpunkt (utan namn) och en slutpunkt med namnet "instrumentpanel":
{
"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 */
}
}
}
I det föregående JSON:
- Standardslutpunkten när du löser
https://basket
är10.2.3.4:8080
. - Endpointen "instrumentpanel", som löses via
https://_dashboard.basket
är10.2.3.4:9999
.
Namngivna slutpunkter i .NET.NET Aspire
var basket = builder.AddProject<Projects.BasketService>("basket")
.WithHttpsEndpoint(hostPort: 9999, name: "dashboard");
Namngivna slutpunkter i Kubernetes med DNS SRV
När du distribuerar till Kuberneteskan DNS SRV-tjänstens slutpunktslösare användas för att upplösa namngivna slutpunkter. Följande resursdefinition resulterar till exempel i att en DNS SRV-post skapas för en slutpunkt med namnet "default" och en slutpunkt med namnet "instrumentpanel", båda i tjänsten med namnet "korg".
apiVersion: v1
kind: Service
metadata:
name: basket
spec:
selector:
name: basket-service
clusterIP: None
ports:
- name: default
port: 8080
- name: dashboard
port: 9999
För att konfigurera en tjänst för att lösa slutpunkten "instrumentpanel" på "korg"-tjänsten, lägg till DNS SRV-slutpunktslösaren i värdbygget på följande sätt:
builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();
Mer information finns i AddServiceDiscoveryCore och AddDnsSrvServiceEndpointProvider.
Det särskilda portnamnet "default" används för att ange standardslutpunkten, som fastställs med hjälp av URI-https://basket
.
Precis som i föregående exempel lägger du till tjänstidentifiering i en HttpClient
för korgtjänsten:
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https://basket"));
På samma sätt kan slutpunkten "dashboard" riktas på följande sätt:
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https://_dashboard.basket"));
Se även
.NET Aspire