.NET .NET Aspire servicedetectie
In dit artikel leert u hoe servicedetectie werkt binnen een .NET.NET Aspire project. .NET .NET Aspire bevat functionaliteit voor het configureren van servicedetectie tijdens de ontwikkel- en testtijd. De functionaliteit voor servicedetectie werkt door configuratie op te geven volgens de indeling die de op configuratie gebaseerde eindpuntresolver van het .NET.NET Aspire AppHost-project verwacht, voor de afzonderlijke serviceprojecten die zijn toegevoegd aan het applicatiemodel. Zie Servicedetectie in .NETvoor meer informatie.
Impliciete servicedetectie via referentie
Configuratie voor servicedetectie wordt alleen toegevoegd voor services waarnaar wordt verwezen door een bepaald project. Denk bijvoorbeeld aan het volgende AppHost-programma:
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);
In het vorige voorbeeld verwijst het -frontendproject-project naar het -catalogus-project en het -mandje-project. De twee WithReference oproepen instrueren het .NET.NET Aspire project om serviceontdekkingsinformatie door te geven voor de projecten waarnaar wordt verwezen (catalogusen mand) in het frontendproject.
Benoemde eindpunten
Sommige services maken meerdere benoemde eindpunten beschikbaar. Benoemde eindpunten kunnen worden opgelost door de eindpuntnaam op te geven in het hostgedeelte van de HTTP-aanvraag-URI, volgens het formaat scheme://_endpointName.serviceName
. Als een service met de naam 'basket' bijvoorbeeld een eindpunt met de naam dashboard weergeeft, kan de URI-https+http://_dashboard.basket
worden gebruikt om dit eindpunt op te geven, bijvoorbeeld:
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"));
In het voorgaande voorbeeld worden twee HttpClient klassen toegevoegd, één voor de kernmandservice en één voor het dashboard van de mandservice.
Benoemde eindpunten met behulp van configuratie
Met de op configuratie gebaseerde eindpuntomzetting kunnen benoemde eindpunten worden opgegeven in de configuratie door de eindpuntwaarde vooraf te laten gaan aan _endpointName.
, waarbij endpointName
de naam van het eindpunt is. Denk bijvoorbeeld aan deze appsettings.json configuratie waarmee een standaardeindpunt (zonder naam) en een eindpunt met de naam 'dashboard' is gedefinieerd:
{
"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 */
}
}
}
In de voorgaande JSON:
- Het standaardeindpunt, wanneer
https://basket
wordt opgelost, is10.2.3.4:8080
. - Het eindpunt dashboard, opgelost via
https://_dashboard.basket
, is10.2.3.4:9999
.
Benoemde eindpunten in .NET.NET Aspire
var basket = builder.AddProject<Projects.BasketService>("basket")
.WithHttpsEndpoint(hostPort: 9999, name: "dashboard");
Benoemde eindpunten in Kubernetes met behulp van DNS SRV
Bij het uitrollen naar Kuberneteskan de DNS SRV-service eindpuntresolver worden gebruikt om de benaamde eindpunten op te lossen. De volgende resourcedefinitie resulteert bijvoorbeeld in een DNS SRV-record die wordt gemaakt voor een eindpunt met de naam 'standaard' en een eindpunt met de naam 'dashboard', beide op de service met de naam 'basket'.
apiVersion: v1
kind: Service
metadata:
name: basket
spec:
selector:
name: basket-service
clusterIP: None
ports:
- name: default
port: 8080
- name: dashboard
port: 9999
Om een service te configureren om het eindpunt 'dashboard' in de 'basket'-service op te lossen, voegt u de DNS SRV-resolver voor service-eindpunten als volgt toe aan de hostbuilder:
builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();
Zie AddServiceDiscoveryCore en AddDnsSrvServiceEndpointProvidervoor meer informatie.
De speciale poortnaam 'standaard' wordt gebruikt om het standaardeindpunt op te geven, opgelost met behulp van de URI-https://basket
.
Net als in het vorige voorbeeld voegt u servicedetectie toe aan een HttpClient
voor de winkelwagenservice:
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https://basket"));
Op dezelfde manier kan het "dashboard" eindpunt als volgt worden aangeroepen:
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https://_dashboard.basket"));