Delen via


.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, is 10.2.3.4:8080.
  • Het eindpunt dashboard, opgelost via https://_dashboard.basket, is 10.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"));

Zie ook